Следовательно, к предыдущему вопросу о const / non-const с тернарным оператором следует следующее test
функционирует нормально относительно стандарта C ++ 11:
template<bool UseConst> class MyClass
{
public:
constexpr bool test()
{
return (UseConst) ? (_constvar) : (_var);
}
protected:
int _var;
static const int _constvar;
}
Вся проблема в том, что _constvar
является постоянным, и _var
неконстантен. Мне нужно было бы получить доступ к этим 2 данным в зависимости от параметра шаблона через ту же функцию, и я хотел бы иметь функцию времени компиляции, когда я использую const.
Сделать test()
функция удовлетворяет моим требованиям?
Вы можете использовать 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
является true
, вы получите функцию времени компиляции.
Других решений пока нет …