我目前正在使用 C 中的模板類。在這些類中,我使用的型別再次依賴于模板引數。為了不一直輸入引數,我做了一些類似的事情
template<typename T>
class A
{
using someName = someClass<T>;
}
實際代碼中還有更多示例,但這應該說明了這個想法。
這很好用,只要我只需要someName在課堂上A。但是我的專案已經發展壯大,并且我添加了其他也應該使用的模板化類someName。
我的問題是:定義上述(幾種)型別的最佳方法是什么,這些型別依賴于一些模板引數并在多個其他類中使用它們(最好不要不斷寫出所有引數)?
到目前為止我的想法:
- 當然,我可以簡單地復制
using someName = std::someClass<T>;到所有使用它的類。但這不是很優雅,添加類和添加此型別別變得越來越麻煩。 - 另一種方法是將所有
usings 寫入一個檔案,讓編譯器通過include. 但我不確定這是否真的有效,這似乎是一種非常暴力的方法,通常不是很好的做法。 - 我也嘗試了不同的方法,
using但到目前為止都沒有奏效。盡管如此,在我看來,這可能是解決問題的最有希望的途徑。
也許我把事情弄得太復雜了,對此有一個更簡單、更直接的解決方案。
uj5u.com熱心網友回復:
創建一個定義每個公共別名的結構:
template<typename T> struct Aliases {
using value_type = T;
using reference = T&;
};
...并從中繼承:
template<typename T> class Foo: public Aliases<T> {};
template<typename T> class Bar: public Aliases<T> {};
template<typename T> class Baz: public Aliases<T> {};
一些測驗:
static_assert(std::same_as<Foo<char>::value_type, char>);
static_assert(std::same_as<Bar<int>::reference, int&>);
static_assert(std::same_as<Baz<int>::reference, int&>);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380311.html
