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

问题描述 投票:4回答:2

我也想拥有这样的东西

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. 元函数替换了执行操作符()中的if-else。
  2. 返回执行操作员()的类型
c++ metaprogramming
2个回答
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 */
 }
};

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)
{
  // ... 
}
© www.soinside.com 2019 - 2024. All rights reserved.