C ++ - 可以返回不同类型的模板函数?

时间:2016-03-25 22:02:00

标签: c++ templates template-function

我正在开发一段代码,允许用户按不同类型进行搜索(double / string / date(自定义类))。这涉及一个名为readInSearchCriteria()的方法,我试图将其设置为模板。我已经对模板函数做了一些研究,这是我到目前为止所做的:

//template function to process different datatypes
template <typename T> UserInterface::readInSearchCriteria() const {
    //template instance to hold data input from keyboard
    T t;
    //prompt user to enter a value
    cout << "\n ENTER SEARCH CRITERIA: ";
    //read-in value assigned to template variable
    cin >> t;

    //return initialised template variable
    return t;
}

我已经在程序中的某一点调用了这个来处理double,如此:

double amount = theUI_.readInSearchCriteria<double>(); //works absolutely fine

然而,当我试图在string上调用它时,编译器给出了以下错误:

  

没有合适的构造函数可以转换为&#34; int&#34; to&#34; std :: basic_string,std :: allocator&gt;&#34;

有人能够就这里可能出现的问题向我提出任何建议吗?

2 个答案:

答案 0 :(得分:4)

您的函数声明中有一个拼写错误:您没有指定返回类型,因此编译器默认为int

您需要添加T作为返回类型:

template <typename T>
T UserInterface::readInSearchCriteria() const {
    ...
    return T
}

答案 1 :(得分:2)

方法readInSearchCriteria没有返回类型。您必须为函数指定返回类型,此处它是隐式int,因为您尚未指定。

template <typename T> T UserInterface::readInSearchCriteria() const;