2015-02-10 163 views
0

我想將僅在編譯期間已知的類型向量傳遞給將函數傳遞給其他函數(以根據類型向量推送元素)的函數。將模板參數傳遞給調用成員函數的函數

我應該如何做到這一點,以保證編譯器不會引發錯誤:

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); 
} 
+3

我更關心的是,沒有聲明的返回類型和值在其當地的變化意味着在返回 – WhozCraig 2015-02-10 05:51:52

+1

經典XY問題沒有給調用者的參數中的所有模板功能。順便說一句,使用'value_type'。 – 2015-02-10 05:53:40

+0

你真的想做什麼? – Pradhan 2015-02-10 05:55:57

回答

2

您的函數沒有返回類型。假設這是一個遺漏的錯誤,你可能會有兩個函數。

template <class A> 
void checkType(vector<A> vec) 
{ 
    funcPushFloat(vec); 
} 

void checkType(vector<int> vec) 
{ 
    funcPushInt(vec); 
} 
+0

感謝或答覆,但我想單個checkType函數,而不是使用多個函數。是的,我遺漏了返回類型 – LockheedL1011 2015-02-10 06:12:26

+0

是否有技術上的原因,爲什麼你想要一個單一的功能? – 2015-02-10 06:21:09

+0

不是真的..只是爲了方便,不必重複一堆代碼。我想我必須這樣做。感謝R Sahu! – LockheedL1011 2015-02-10 06:31:10

相關問題