因此,关于使用三元运算符的const / non-const的先前问题,关于C ++ 11标准的以下test
函数是否正常:
template<bool UseConst> class MyClass
{
public:
constexpr bool test()
{
return (UseConst) ? (_constvar) : (_var);
}
protected:
int _var;
static const int _constvar;
}
整个问题是,_constvar
是const,而_var
是非const。我必须通过相同的函数根据模板参数访问这两个数据,并且我想在使用const时有一个编译时函数。
test()
功能是否满足我的要求?
答案 0 :(得分:0)
您可以使用SFINAE来“专门化”test
功能。换句话说,您可以执行以下操作:
template<bool true_false>
struct true_type
{
static char value;
};
template<>
struct true_type<false>
{
static char value[2];
};
template<bool UseConst> class MyClass
{
private:
constexpr int pre_test(const char arg) { return _constvar; }
int pre_test(char (&)[2]) const { return _var; }
public:
constexpr int test()
{
return pre_test(true_type<UseConst>::value);
}
protected:
int _var;
static const int _constvar;
};
现在,当您致电MyClass::test
时,如果UseConst
为false
,则test
会降级为运行时功能,但UseConst
为{ {1}},您将获得编译时功能。