C++如何调用模板变量类型列表的方法内部的一个类的方法,这是从该列表派生的?

omvjsjqw  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(61)

所以我想要一个类,它允许一系列类以这种方式调用它们的decode/encode方法:

/// This class manages the decoding/encoding of a sequence of binary fields.
template <typename Derived, typename... Fields >
struct BinarySequence : Fields...
{
    using Super = BinarySequence;

    bool decode(const char* buffer, size_t& length)
    {
        return true && Fields...::decode(buffer, length);
    }

    bool encode(char* buffer, size_t& length)
    {
        return true && Fields...::encode(buffer, length);
    }
};

问题是调用Fields...::decode(buffer, length)不是正确的方式。如果我有BinarySequence< MessageType, MessageSender, MessageTimeStamp >,我希望它的解码器执行相同的操作

bool decode(const char* buffer, size_t& length)
{
    return MessageType::decode(buffer, length) && MessageSender::decode(buffer, length) && MessageTimeStamp::decode(buffer, length);
}

什么才是正确的方法呢?Visual Studio Code 2017

tvz2xvvm

tvz2xvvm1#

看看fold expressions。正确的语法是:

/// This class manages the decoding/encoding of a sequence of binary fields.
template <typename Derived, typename... Fields >
struct BinarySequence : Fields...
{
    using Super = BinarySequence;

    bool decode(const char* buffer, size_t& length)
    {
        return (Fields::decode(buffer, length) && ...);
    }

    bool encode(char* buffer, size_t& length)
    {
        return (Fields::encode(buffer, length) && ...);
    }
};

这需要C++17或更高版本。

相关问题