【问题标题】:C++ basic type wrappersC++ 基本类型包装器
【发布时间】:2023-03-09 11:17:02
【问题描述】:

我想围绕 C++ 中的简单类型创建一些基本的包装类。因为你不能像你应该能够的那样从基类型继承,所以我只是使用一个包装类。问题是,我希望能够直接转换为该类型,因为该转换是完全有效的。编译器只是不允许你,我找不到一种方法来告诉它没有运行会降低性能的强制转换方法就可以了。有没有办法做到这一点?

以下是我的转换构造函数:

class Integer32
{ 
    public: 
    Integer32(int value) { this->Value = value; } 
    int Value; 
};

编译器是否知道跳过它并直接从 int 分配它?我如何测试它以确保它相当重要......

标签: c++


【解决方案1】:

提供非explicit 构造函数以允许从基类型转换和强制转换为您的包装器。 提供非explicit 转换运算符以允许从包装器转换为基类。

class my_wrapper {
    my_wrapper(int); // casting from int
    operator int();  // casting to int
};

(将它们设为explicit 以允许显式转换但不允许隐式转换)

【讨论】:

  • 这行得通,除了从 int 进行转换需要一个方法来配合它,我只想在不运行任何代码的情况下进行转换(为了性能)
  • @RyanBrown 它将被内联而没有开销。
  • @RyanBrown 不,这不是缺点。调试时不应该关心性能。无论如何,大多数编译器都有办法强制对某些函数进行内联,如果你真的在乎,你可以研究一下。
  • @RyanBrown:如果您更关心未分析的性能而不是让您的代码首先工作,那么您将永远无法进行编程。它足够快,直到您的数据表明它不是。
  • @RyanBrown:让我直截了当地说:你是 C++ 新手,不太了解这门语言,更不用说习语,无法编译优化,你会说 你知道最好的方法,并将你的失败归咎于语言?你认为你有能力说出 C++ 能有效做什么和不能有效做什么?如果你要那样做,你应该在别处寻求帮助。
猜你喜欢
  • 2010-12-24
  • 2016-12-29
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多