【发布时间】:2014-09-16 15:56:06
【问题描述】:
我想知道执行以下操作是否安全:
template<class T>
void Parameters::add(Parameter<T> p)
{
std::string sprobe("");
int iprobe = 0;
double dprobe = 0.;
if (typeid(T) == typeid(sprobe))
this->mstrings[p.name()] = p;
if (typeid(T) == typeid(iprobe))
this->mints[p.name()] = p;
if (typeid(T) == typeid(dprobe))
this->mdoubles[p.name()] = p;
}
我有一个用于存储参数的类。它有 3 个 boost::unordered_map 成员变量,用于存储 int、double 和 std::string 类型的参数;
我创建了一个模板类参数。
我了解,如果我的参数不是我预期的 3 种类型之一,这将失败。但这不是问题,因为我知道参数只能是这些类型。
感谢您的帮助
【问题讨论】:
-
听起来你想要模板专业化。甚至只是重载。
-
你为什么不重载你的函数?
-
我认为重载可以解决问题。非常感谢 但是在这种情况下使用 typeid 是否安全?
-
typeid是 RTTI,它可能根本没有启用,而且它会丢弃 cv 限定符 -
@PiotrS。所以我想这是一个不 :) 谢谢