gpt4 book ai didi

c++ - 向模板特化添加方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:19 24 4
gpt4 key购买 nike

我有一个模板化的 C++ 类,它公开了许多方法,例如

template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};

现在,如果 X == Y,我想向此类公开其他方法。我通过子类化 MyBuffer 来完成此操作,

template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};

现在,问题是我希望能够做到,例如

MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();

但我不确定如何完成此操作。我试图想到复制构造函数、转换运算符等,但不幸的是我的 C++ 技能有点生疏。

编辑:我应该补充一点,创建这些对象的成本相对较低(而且不会经常发生),这意味着可以这样做:

MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();

那么问题是,我如何定义这样的转换。我认为转换运算符需要在 MyBuffer 中,但我希望它仅在 X==Y 时可用。

最佳答案

我会选择 CRTP这里:

template<int X, int Y, class Derived>
struct MyBufferBase {
// common interface:
Derived& method1() { return *static_cast<Derived*>(this); }
};

template<int X, int Y>
struct MyBuffer : MyBufferBase<X, Y, MyBuffer<X,Y> > {
// basic version
};

template<int X>
struct MyRegularBuffer : MyBufferBase<X, X, MyRegularBuffer<X> > {
// extended interface:
MyRegularBuffer& method2() { return *this; }
};

关于c++ - 向模板特化添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366778/

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