gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:13:34 24 4
gpt4 key购买 nike

现在我有了一个模板类

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com