【发布时间】:2019-08-11 11:13:02
【问题描述】:
这些类之间有什么区别?正是这些方法与 enable_if。
/// Alias of std::enable_if...
template <bool B, typename T = void>
using Enable_if = typename std::enable_if<B, T>::type;
Template<typename T, std::size_t N>
class A {
...
template <std::size_t NN = N,
typename = Enable_if<NN == 2>>
Some_Return_Type
method(param1, param2)
{}
template <std::size_t NN = N,
typename = Enable_if<NN == 1>>
Some_Return_Type
method(param1)
{}
};
Template<typename T, std::size_t N>
class B {
...
Enable_if<N == 2, Some_Return_Type>
method(param1, param2)
{}
Enable_if<N == 1, Some_Return_Type>
method(param1)
{}
};
在我有的情况下使用 enable_if 的正确方法是什么:
- 至少有 2 个方法仅在参数上有所不同,并且它们具有相同的名称,但其中只有一个必须是“活动的”(如果 N == 1 其中一个,如果 N == 2 另一个)。
- 只有一种方法在 N == 0 时有效,而在其他情况下无效。
我想得到类似的东西:
Obj<int, 2> obj2;
Obj<int, 0> obj0;
Obj<int, 1> obj1;
如果我在 IDE obj0. 中编写它只显示 N == 0 的方法; obj1. 仅限 N == 1, ... .
谢谢。
【问题讨论】:
-
您希望哪种方法可用于 N==0?
-
作为说明,C++14添加了库类型别名
std::enable_if_t<bool, typename>,相当于你的Enable_if。