当模板的功能不相同时的 C++ 模板

标签 c++ templates instantiation

现在我有了一个模板类

template <class T>
class b
{
    void someFunc() {
        T t;
        t.setB();
    }
};

我知道模板 T 只会被实例化为 2 个类。

class D
{
public:
     void setB();
};

class R
{
public:
     void SetB();
};

我们可以看到,D类的函数名setB与R类的函数SetB是不一样的。所以在模板类 b 中我不能只使用 setB。那么有没有办法修改D或者R呢?我可以在模板类中添加一些包装器或技巧来解决这个问题吗?

最佳答案

也许特征类可以帮助您:

struct Lower {};
struct Upper {};

// trait for most cases
template <typename T>
struct the_trait {
    typedef Lower Type;
};
// trait for special cases
template <>
struct the_trait<R> {
    typedef Upper Type;
};

template <class T>
class b {
public:
    void foo() {
        foo_dispatch(typename the_trait<T>::Type());
    }
private:
    void foo_dispatch(Lower) {
        T t;
        t.setB();
    }
    void foo_dispatch(Upper) {
        T t;
        t.SetB();
    }
};

正如@Arunmu 指出的那样,此技术也称为 Tag Dispatching .

关于当模板的功能不相同时的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803939/

相关文章:

java - 在循环中定义对象

c++ - 如何在 opengl 中为 3d 对象设置原点

c++ - 使用 Dev-C++ 编译时出错

c++ - 使用 Boost,如何将自定义边缘属性作为结构放置/获取?

javascript - Backbone Handlebars 变量返回 0(零)

c++ - "unpack"std::array<T,N> 作为函数的参数

c++ - 在 C++ 中创建对象

c++ - 如何自动更改变量的赋值?

c++ - 如何确定是否存在模板特化

android - 无法实例化 Activity ComponentInfo