将模板参数传递给调用成员函数的函数

时间:2015-02-10 05:49:25

标签: c++ templates

我想将一个只在编译时知道的类型向量传递给一个函数,该函数将它传递给其他函数(根据向量的类型推送元素)。

我该怎么做才能确保编译器不会抛出错误:

test.cpp:在'void funcPushInt(std :: vector)[with C = classB]'的实例化中: test.cpp:28:20:'void checkType(std :: vector)[with A = classB]'需要' test.cpp:53:16:从这里要求 test.cpp:38:3:错误:没有匹配函数来调用'std :: vector :: push_back(int&)'    vec.push_back(ⅰ);    ^

#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);
}

1 个答案:

答案 0 :(得分:2)

您的功能没有返回类型。假设这是一个遗漏错误,你可能还有两个函数。

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

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