我有一个函数,它需要一个模板类型来确定返回值。有没有办法在编译时判断模板类型是否是某个模板类的实例化?
例如:
例如:
class First { /* ... */ };
template <typename T>
class Second { /* ... */ };
using MyType = boost::variant<First, Second<int>, Second<float>>;
template <typename SecondType>
auto func() -> MyType {
static_assert(/* what goes here?? */, "func() expects Second type");
SecondType obj;
// ...
return obj;
}
MyType obj = func<Second<int>>();
我知道可以通过以下方式解决这个问题
template <typename T>
auto func() -> MyType {
static_assert(std::is_same<T, int>::value || std::is_same<T, float>::value,
"func template must be type int or float");
Second<T> obj;
// ...
return obj;
}
MyType obj = func<int>();
我只是好奇是否有一种方法可以测试类型是否是模板类的实例化?因为如果MyType
最终有6个Second
实例,我不想测试所有可能的类型。
Second
吗?如果你可以添加一个std :: true_type isSecond
成员,这件事很容易。 - Caleth