[英]C++ class template taking either type or non-type
我看到了一些類似的問題,但他們似乎沒有解決這個問題。
我可以在模板上重載 function:
template <typename T> void foo(); // Called as e.g., foo<int>();
template <std::size_t I> void foo(); // Called as e.g., foo<2>();
有沒有辦法用 class 做類似的事情,我可以有MyClass<int>
或MyClass<2>
?
我看不出有什么辦法。 (我的真正目標是擁有一個可調用的static constexpr
實例,其行為類似於std::get
。而std::get
是在其“索引”參數和參數類型上模板化的,我想制作一個可單獨調用,因此myns::get<2>
和myns::get<int>
都是可調用的,並且在調用時的行為類似於std::get<2>(tup)
和std::get<int>(tup)
分別。
天真地你希望這樣的事情會起作用,但auto
是一種類型:
template <auto IndOrType>
constexpr auto get = [](auto&& tup) {
return std::get<IndOrType>(std::forward<decltype(tup)>(tup));
};
我可以制作一個返回 lambda 的吸氣劑 function,但隨后在myns::get<2>()(tup)
或myns::get<int>()(tup)
) 中使用()
調用它。
您可以使用輔助類型std::integral_constant<int,N>
專門化 class 。 雖然不幸的是,這並不完全允許MyClass<2>
語法:
#include <type_traits>
template<typename T>
class MyClass
{
};
template<int N>
using ic = std::integral_constant<int,N>;
template<int N>
class MyClass<ic<N>>
{
};
int main()
{
MyClass<int> a;
MyClass<ic<2>> b;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.