根据模板参数c ++调用不同的函数

时间:2010-06-01 09:47:27

标签: c++ metaprogramming

我希望有类似的东西

class A
{
public:
    Array& operator()()
    { . . . }
};

class B
{
public:
    Element& operator[](int i)
    { ... }
};

template<class T>
class execute
{
public:
    output_type = operator()(T& t)
    {
        if(T == A)
            Array out = T()();
        else
        {
            Array res;
            for(int i=0 ; i < length; ++i)
                a[i] = t[i];
        }
    }
};

这里有两个问题:

  1. 元函数在execute operator()
  2. 中替换if-else
  3. 返回execute operator()的类型
  4. 感谢您的期待,

    诺曼

2 个答案:

答案 0 :(得分:3)

只需专门化模板类。

template<class T>
class execute
{};

template<>
class execute<A>
{
 A operator()(A& t)
 {
   /* use A, return A */
 }
};

template<>
class execute<B>
{
 B operator()(B& t)
 {
   /* use B, return B */
 }
};

答案 1 :(得分:2)

只是重载操作员:

// used for As
Array operator()(A& a)
{
  // ... 
}

// used for everything else
typename T::Element operator()(T& t)
{
  // ... 
}

如果您只需AB,则第二个也可能特定于B

// used for Bs
B::Element operator()(B& b)
{
  // ... 
}