Мне нужен способ проверить, является ли тип шаблонного класса недействительным.
Вот моя попытка:
template <typename target_type, typename start_function_type, typename end_function_type> class C_rule {
public:
//...
void setIntoEffect(bool true_or_false) {
if (true_or_false == true) {
for (size_t i = 0; i < targets.size(); i++) {
if (typeid(start_function_type) != typeid(void)) {
start_function_type start_function_return_value = enforceOnTarget(targets.at(i));
}
else {
enforceOnTarget(targets.at(i));
}
}
}
else if ((true_or_false == false) && (is_in_effect == true)) {
for (size_t i = 0; i < targets.size(); i++) {
if (typeid(end_function_type) != typeid(void)) {
end_function_type end_function_return_value = removeFromTarget(targets.at(i));
}
else {
removeFromTarget(targets.at(i));
}
}
}
is_in_effect = true_or_false;
}
protected:
//...
private:
//...
};
Однако это генерирует ошибку компилятора, жалующуюся на то, что две переменные «start_function_return_value» и «end_function_return_value» объявляются недействительными при создании объекта C_rule с пустыми «start_function_type» и «end_function_type». Я пытаюсь предотвратить создание переменной для хранения возвращаемого значения из функций «начало» и «конец» для правила, если тип возвращаемого значения этих функций недействителен (поскольку функции недействительности, очевидно, ничего не возвращают). И, как видите, я пытаюсь использовать для этой цели оператор typeid, но, похоже, он не работает. По-видимому, оператор if все еще вводится, когда start_function_type и end_function_type недействительны, и я не знаю, почему. Может быть, typeid не работает с пустотой? Я гуглил вопрос, но не нашел ответа, поэтому и задаю его здесь.
Заранее спасибо.
std::is_void
? - person Kerrek SB   schedule 02.03.2013std::is_same
илиstd::is_void
вместоtypeid
. - person chris   schedule 02.03.2013