如何根据类模板参数值选择类模板成员函数的参数类型?
这是一个例子:
#include <memory>
template <class T, bool plainPointer=true>
class C
{
// pseudocode below
void f(plainPointer ? T * x : std::shared_ptr<T> x) { /*implementation*/ }
};
也就是说,如果plainPointer==true
,应该定义以下类成员函数:
void f(T * x) { /*implementation*/ }
否则,应定义该成员函数:
void f(std::shared_ptr<T> x) { /*implementation*/ }
我希望这两个函数都有一个实现,并且只有 的参数类型f
应该是plainPointer
依赖的。
您可以用来
std::conditional_t
在两种类型之间进行选择:请注意,要使此方法发挥作用, 中的两个选项
conditional_t
对于所有实例化都必须格式正确。如果您计划在类中多次使用该函数参数类型,则可以创建一个可以重用的类型别名: