c++ - 在没有模板特化的情况下更改函数的返回类型。 C++

标签 c++ templates return

我想知道是否可以根据分配给它的变量类型来更改函数的返回类型。这是我的意思的一个简单示例。

我想创建一个函数来解析字符串中的 int、bool 或 float 变量。比如……

Int value = parse("37");
Float value = parse("3.14");
Bool value = parse("true");

我知道如果我将此函数设为模板,则必须从始终为字符串的参数列表中确定变量类型。有没有其他方法可以用 c++ 做到这一点?

最佳答案

这可以通过转换函数来完成

struct proxy {
    string str;
    proxy(string const &str):str(str) { }
    template<typename T> operator T() { 
        return boost::lexical_cast<T>(str); 
    }
};

proxy parse(string const &str) { return proxy(str); }

现在你只需要做

float a = parse("3.1");

它应该运作良好。顺便说一句,您可以直接使用该类。我建议将其重命名为 conversion_proxy 以表明它只是发生转换的代理,但它本身不进行转换

struct conversion_proxy {
    string str;
    conversion_proxy(string const &str):str(str) { }
    template<typename T> operator T() { 
        return boost::lexical_cast<T>(str); 
    }
};

float a = conversion_proxy("3.1"); 

关于c++ - 在没有模板特化的情况下更改函数的返回类型。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010539/

相关文章:

c++ - 检索流程创建时间的API(Linux)

c++ - 如何在 QT 中读取 GPX 文件(xml 格式)?

c++ eigen 3.5,特征图不使用命名返回值优化?

c++ - 模板方法编译错误,返回是内部类的实例

C++ 返回字符串

c++ - 返回开关的三元运算符

c++ - 从 C++ 调用共享库

c++ - 打破一个 TU 内的 ODR?

c++ - 实现简化的 C++ vector 类拷贝 - 无法编译

javascript - 闭包编译器 : Avoid "missing return statement" warning when a return is guaranteed