我正在尝试实现一个通用的配置文件解析器,我想知道如何在我的类中编写一个能够根据输入参数的类型确定其返回类型的方法.这就是我的意思:
class Config
{
...
template <typename T>
T GetData (const std::string &key, const T &defaultValue) const;
...
}
Run Code Online (Sandbox Code Playgroud)
为了调用上面的方法,我必须使用这样的东西:
some_type data = Config::GetData<some_type>("some_key", defaultValue);
Run Code Online (Sandbox Code Playgroud)
如何摆脱冗余规范?我看到boost :: property_tree :: ptree :: get()能够做到这一点,但实现相当复杂,我无法破译这个复杂的声明:
template<class Type, class Translator>
typename boost::enable_if<detail::is_translator<Translator>, Type>::type
get(const path_type &path, Translator tr) const;
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想这样做,而不会在使用我的Config类的代码中创建依赖boost.
PS:当谈到C++模板时,我是一个n00b :(
在C++ 11中有没有办法实现一个sqrt适用于正double输入值和负输入值的函数?std::complex<double>如果输入是负数,我希望返回类型,如果是正数,我想double.我意识到简单的解决方案是永远返回,std::complex<double>但这不是我想要的.
下面我有一个我第一次尝试的例子,但由于a返回类型的存在,这不会编译:
inline decltype((a > 0)?(double):(std::complex<double>)) sqrt(const double& a)
{
if(a > 0)
{
return std::sqrt(a);
}
else
{
return ((std::complex<double>(0.0,1.0))*std::sqrt(-a));
}
}
Run Code Online (Sandbox Code Playgroud)