2015-02-10 175 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

相关问题