我有一個類test,它有一個包含一堆字串的向量。我希望能夠將向量中的第一個值作為任何型別或任何型別的整個向量回傳。(所以我可以將第一個值作為整數回傳,或者將整個資料向量作為整數向量回傳)
我現在擁有的東西不起作用,我正在尋找多載功能的幫助:
class test
{
public:
std::string name;
std::vector<std::string> data;
test(const std::string& n) : name(n) {}
void add_data(const std::string& s)
{
data.push_back(s);
}
// return first element of data
template<typename T>
T get()
{
return convert<T>(data[0]); //converts data[0] to appropriate type
}
//return a vector of any type
template<typename T>
std::vector<T> get<std::vector<T>>()
{
std::vector<T> ret_vector;
for (std::string s : data)
{
ret_vector.push_back(convert<T>(s));
}
return ret_vector;
}
};
int main(int argc, char* argv[])
{
test a("first");
test b("second");
a.add_data("2");
b.add_data("bob");
b.add_data("john");
a.get<std::string>();
a.get<int>();
b.get<std::vector<std::string>>();
}
我只是不確定如何正確多載第二個get()函式。我也認為我正在做部分專業化,我發現這是不允許的。無論如何我可以得到我想要的行為?現在我得到:
test.cpp:30:23: error: expected initializer before ‘<’ token
30 | std::vector<T> get<std::vector<T>>()
| ^
非常感謝任何幫助。
uj5u.com熱心網友回復:
我從之前找不到的相關帖子中找到了解決方案...
template <typename T>
T get()
{
return get_helper((T*)0);
}
//return a single value
template <typename T>
T get_helper(T*)
{
return convert<T>(data[0]);
}
//return vector of values
template <typename T>
std::vector<T> get_helper(std::vector<T> *)
{
std::vector<T> ret_vector;
for (const std::string s : data)
ret_vector.push_back(convert<T>(s));
return ret_vector;
}
相關帖子:模板引數的模糊模板多載是一個容器
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438912.html
