用另一个类的函数重载一个函数

卡洛夫斯基120

我有一个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);

将调用第二个函数。这意味着AnotherClasss read 函数将重载该BinaryMemoryReader特定类型s read 函数。

它可以让我写出更简洁的代码。

编辑:一般的想法是这样的:

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

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

用户0042

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

  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所有职业专长。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用jQuery调用另一个函数

来自分类Dev

从另一个类迅速调用函数

来自分类Dev

调用另一个函数重载

来自分类Dev

在另一个模块中使用类/函数

来自分类Dev

从MainActivity类的另一个函数访问WebView

来自分类Dev

从另一个调用构造函数,Java重载

来自分类Dev

Python-从另一个类调用函数

来自分类Dev

Python从类中的另一个函数调用一个函数

来自分类Dev

从Kivy中的另一个类调用函数

来自分类Dev

从另一个类中的另一个函数激活一个函数

来自分类Dev

llvm用另一个函数替换一个函数

来自分类Dev

PHP如何从另一个类调用函数?

来自分类Dev

触发另一个类中的函数

来自分类Dev

调用另一个函数重载

来自分类Dev

在另一个模块中使用类/函数

来自分类Dev

使用另一个类的函数指针

来自分类Dev

在Swift中从另一个类调用函数

来自分类Dev

从另一个类调用函数?安卓

来自分类Dev

从另一个函数中调用类函数

来自分类Dev

在Kivy中引用另一个类的函数

来自分类Dev

Python-从另一个类调用函数

来自分类Dev

如何从另一个类调用函数?

来自分类Dev

用另一个函数覆盖一个函数的结果

来自分类Dev

Ionic 2 使用另一个类的函数

来自分类Dev

PHP - 从另一个类调用类函数

来自分类Dev

java:使用另一个类的构造函数

来自分类Dev

从另一个类调用函数?

来自分类Dev

如何从另一个类调用函数

来自分类Dev

从另一个函数存根类调用