我想將僅在編譯期間已知的類型向量傳遞給將函數傳遞給其他函數(以根據類型向量推送元素)的函數。將模板參數傳遞給調用成員函數的函數
我應該如何做到這一點,以保證編譯器不會引發錯誤:
TEST.CPP:在實例化「無效funcPushInt(標準::矢量)與C = CLASSB]」: 測試.cpp:28:20:需要從'void checkType(std :: vector)[with A = classB]' test.cpp:53:16:從這裏需要 test.cpp:38:3:error:no matching函數調用'std :: vector :: push_back(int &)' vec.push_back(i); ^
#include <typeinfo>
#include <vector>
using namespace std;
class classB
{
private:
int i;
public:
B()
{
i = 0;
}
}
template <class A>
void checkType(vector<A>);
template <class C>
void funcPushInt(vector<C>);
template <class B>
void funcPushClassB(vector<B>);
template <class A>
void checkType(vector<A> vec)
{
// check type of vec
if(typeid(vec) == typeid(vector<int>))
funcPushInt(vec);
else if(typeid(vec) == typeid(vector<classB>))
funcPushClassB(vec);
}
template <class C>
void funcPushInt(vector<C> vec)
{
// push int
int i = 1;
vec.push_back(i);
}
template <class B>
void funcPushClassB(vector<B> vec)
{
// error as it can't push float to vector<int>
classB objB;
vec.push_back(objB);
}
int main()
{
// empty vec of classB type
vector<classB> vec;
checkType(vec);
}
我更關心的是,沒有聲明的返回類型和值在其當地的變化意味着在返回 – WhozCraig 2015-02-10 05:51:52
經典XY問題沒有給調用者的參數中的所有模板功能。順便說一句,使用'value_type'。 – 2015-02-10 05:53:40
你真的想做什麼? – Pradhan 2015-02-10 05:55:57