【发布时间】:2020-04-28 20:00:47
【问题描述】:
我想要一个基于类的模板参数值禁用/启用成员函数的类。我有以下内容:
enum MyType{ type1, type2 };
template <MyType type>
class Test{
public:
enum TestTraits{ testType = type };
template <typename T>
constexpr bool func(SomethingElse<T> else)
{
if(testType == type1) return false;
// some logic that would return true or false
}
};
我基本上想让它成为编译时检查而不是运行时检查,如果可能的话,它甚至不是客户端调用它的选项。我确定解决方案是 enable_if,但是当我看到它时,似乎需要 enable_if 来决定返回类型或函数参数之一
【问题讨论】:
-
基本上是的
-
会有多少种不同的排列?对于像这样的 2 的简单示例,您可以只针对两个不同的选项专门化该类。
-
只有两种类型,我之前已经实现过该解决方案,但其中有一些不同的功能。我希望我可以只上“一个”课
-
您真正需要的是constexpr if,但这是 C++17 的特性。否则,您可以有多个重载并使用 SFINAE,例如刚刚回答的 jork。
标签: c++ c++11 templates metaprogramming enable-if