如何让成员函数实现依赖于类的模板参数?
How to have a member function implementation dependent on class' template parameter?
这是我最好的尝试:
#include <iostream>
template <bool EnableSomething = false>
class MyClass
{
typename std::enable_if< EnableSomething >::type
something(int& x)
{
x += 1; //do something
}
typename std::enable_if< !EnableSomething >::type
something(int& x)
{
// do nothing, should be optimized away
}
public:
void Process()
{
int x = 0;
something(x);
std::cout << "Enabled: " << EnableSomething << ". x = " << x << std::endl;
}
};
int main()
{
MyClass<true> yes;
MyClass<false> no;
yes.Process();
no.Process();
return 0;
}
编译器说: tester.cpp(12): error C2039: 'type': is not a member of 'std::enable_if<false,_Ty>'
制作常规模板,默认参数从parent tempalte中获取:
template<bool x_enabled = EnableSomething>
typename std::enable_if< x_enabled >::type
something(int& x)
{
x += 1; //do something
}
template<bool x_enabled = EnableSomething>
typename std::enable_if< !x_enabled >::type
something(int&)
{
// do nothing, should be optimized away
}
使用C 17事物变得更简单:
void
something(int& x)
{
if constexpr(EnableSomething)
{
x += 1; //do something
}
}
相关文章:
- 类成员函数参数列表是否可以依赖于模板参数?
- 如何定义依赖于参数包转换的函数的返回类型
- C++ 使函数调用依赖于模板参数
- 如何初始化依赖于先前条目的可变参数模板?
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 运算符<<依赖于参数的查找不在全局命名空间中查找
- 依赖于其他模板参数的模板参数
- 使用不依赖于方法模板参数的enable_if
- 如何定义具有依赖于符号调试的参数的函数
- 如何让成员函数实现依赖于类的模板参数?
- 如何避免参数数量依赖于条件的调用分支?
- 为什么在这种情况下不考虑依赖于参数的查找?
- 如何定义依赖于模板参数的类型定义
- 类型依赖于可变参数模板的类
- C++是否可以创建依赖于单个构造函数参数的派生类而不是bass类
- 我如何避免使用依赖于参数的查找明确专门化模板化功能
- 为什么默认参数不能依赖于非默认参数?
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- C++ 错误:"没有依赖于模板参数的'setw'参数
- 依赖于模板参数的范围查找