Использование неконстантной переменной внутри constexpr?

Следовательно, к предыдущему вопросу о 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() функция удовлетворяет моим требованиям?

2

Решение

Вы можете использовать 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, вы получите функцию времени компиляции.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector