template & lt; typename T & gt ;: разрешены только статические шаблоны элементов данных

class value {
template<typename T> T value_1;
float value_2;

public:
template<typename T> void Set1(T first) {
value_2 = (float)0;
value_1 = first;
}

void Set2(float second) {
value_2 = second;
}

float Get2() {
return this->value_2;
}

template<typename T> T Get1() {
return value_1;
}
};

Value_1 выдает ошибку, говоря, что разрешены только статические шаблоны элементов данных. Есть ли способ сохранить value_1 без типа?

1

Решение

Тип нестатического члена данных должен быть известен. Иначе что sizeof(value)?

Чтобы сохранить значение произвольного типа, вы можете использовать std::any или же boost::any.

Использование:

class value {
std::any value_1;
float value_2;

public:
template<typename T> void Set1(T first) {
value_2 = (float)0;
value_1 = first;
}

void Set2(float second) {
value_2 = second;
}

float Get2() {
return this->value_2;
}

template<typename T> T Get1() {
return std::any_cast<T>(value_1);
}
};
3

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

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

По вопросам рекламы [email protected]