gpt4 book ai didi

c++ - 用另一个类的函数重载一个函数

转载 作者:行者123 更新时间:2023-11-28 05:05:15 25 4
gpt4 key购买 nike

我有一个 BinaryMemoryReader具有如下定义的函数的类:

template <typename T>
inline void read(T **data) {
*data = (T*)&stream[position];
position += sizeof(T);
}

它处理内存中流中的大多数标准类型。

自定义复杂类型有自己的读取函数,例如:

void AnotherClass::read(BinaryMemoryReader *const reader)
{
reader->read<bool>(&num);
reader->read<short>(&count);
}

我想写的代码,当我写的时候

reader->read<AnotherClass>(&var);

会调用第二个函数。这意味着 AnotherClass s 的读取函数会使 BinaryMemoryReader 过载s 读取该特定类型的函数。

这将使我能够编写更简洁的代码。

编辑:总体思路是这样的:

  1. 有一个中心BinaryMemoryReader类。
  2. 在其中有一个通用的读取函数来处理标准类型。
  3. 语法为 bmr->read<int>(&intVar);
  4. 在自己的类中定义了专门的读取函数。
  5. 最重要的是,调用它们的语法是 bmr->read<customType>(&customTypeVar);

这样特定的读取函数将与它们自己的类相关联,但可以从 BinaryMemoryReader 中调用.

最佳答案

正如我在评论中所写,我将使用以下方法:

  1. 有一个模板化的自由函数

    template <typename T>
    void read(BinaryMemoryReader& bmr, T& data) {
    bmr.read(&data);
    }
  2. 为您要处理的每种类型专门化该函数

    class AnotherClass {
    template <typename T>
    friend void read(BinaryMemoryReader& bmr, T &data);

    bool num;
    short count;
    };

    template <>
    void read(BinaryMemoryReader& bmr, AnotherClass &data) {
    bmr.read<bool>(&(data.datanum));
    bmr.read<short>(&(data.count));
    };
  3. 这样调用它

     BinaryMemoryReader bmr;
    AnotherType at;
    read(bmr,at);

该技术例如用于 c++ 标准 I/O 库 和为

提供的重载
 std::ostream& operator<<(std::ostream&, const T&);
std::istream& operator>>(std::istream&, T&);

函数。


或者,您可以对 BinaryMemoryReader::read() 函数进行专门化。但是 BinaryMemoryReader 必须是所有类特化的 friend

关于c++ - 用另一个类的函数重载一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44995051/

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