Mr.*_*Boy 16 c++ templates stl
int x = fromString("test"):无法推断'ValueType'的模板参数
int x = fromString<int>("test") :按预期正常工作
那么为什么编译器在这里挣扎呢?我用各种真实的模板函数看到它,而不仅仅是这个愚蠢的例子.它必须是语言的一个特征,但是什么?
Vla*_*lad 20
您无法根据返回类型推断出.但是,您可以使用重载的强制转换运算符实现具有类似语法的变通方法:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class FromString{
private:
string m_data;
public:
FromString(const char*data) : m_data(data) {}
template<typename T>
operator T(){
T t;
stringstream ss(m_data);
ss >> t;
return t;
}
};
template<> FromString::operator bool(){
return (m_data!="false"); //stupid example
}
int main(){
int ans = FromString("42");
bool t = FromString("true");
bool f = FromString("false");
cout << ans << " " << t << " " << f << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
42 1 0
Run Code Online (Sandbox Code Playgroud)