我需要一种方法来检查模板类的类型是否为无效。
这是我的尝试:
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_type”和“end_function_type”为无效的 C_rule 对象时将两个变量“start_function_return_value”和“end_function_return_value”声明为无效。我试图阻止创建一个变量来存储规则的“开始”和“结束”函数的返回值,如果这些函数的返回类型是 void(因为 void 函数显然不返回任何内容)。而且,如您所见,我正在尝试为此目的使用 typeid 运算符,但它似乎不起作用。显然,当 start_function_type 和 end_function_type 为 void 时,仍在输入 if 语句,我不知道为什么。也许 typeid 没有 t 与 void 一起工作?我用谷歌搜索了这个问题,但找不到答案,所以我在这里问这个问题。
提前致谢。