1
A
回答
0
最有可能的是,你指的是一个轻量级的内联(头文件)包装类,虽然我不熟悉这个术语。像这样添加抽象级别在允许通用客户端代码方面很有用。
4
透明类包装器是一个类型的包装器,其中包装器的行为与基础类型相同 - 因此是“透明的”。
解释它,以及它的使用,这里是一个例子,只要它被用来在我们结束了int
但超载operator++()
输出消息(由this thread启发):
class IntWrapper {
int data;
public:
IntWrapper& operator++() {
std::cout << "++IntWrapper\n";
data++;
return *this;
}
IntWrapper(int i) : data(i) {}
IntWrapper& operator=(const IntWrapper& other)
{
data = other.data;
return *this;
}
bool operator<(const IntWrapper& rhs) const { return data < rhs.data; }
// ... other overloads ...
};
然后我们就可以替代用法的int
与IntWrapper
如果我们选择:
for (int i = 0; i < 100; ++i) { /* ... */ }
// becomes
for (IntWrapper i = 0; i < 100; ++i) { /* ... */ }
除了后者将打印时前增量被称为消息。
请注意,我提供了一个非显式构造函数IntWrapper(int i)
。这可以确保,无论何时我使用int
(其中IntWrapper
是预期的)(例如IntWrapper i = 0
),编译器都可以静默地使用构造函数在int
之外创建IntWrapper
。正是出于这个原因,Google C++风格指南不鼓励使用单参数的非显式构造函数,因为可能会出现您不期望的转换,这会损害类型安全性。另一方面,这正是你想要的透明类包装器,因为你确实希望这两种类型可以很容易地转换。
即:
// ...
explicit IntWrapper(int i) ...
// ...
IntWrapper i = 0; // this will now cause a compile error
相关问题
- 1. C#中透明类或透明方法是什么?
- 2. 在C++中为C风格对象创建透明包装类
- 3. 什么是“不透明”键?
- 4. 什么是透明的使用?
- 5. 什么c#类类型声明说?
- 6. C# - 透明表
- 7. 装饰器比适配器更透明是什么意思?
- 8. Win32 C++ SetLayeredWindowAttributes要么完全不透明要么完全透明;没什么所以
- 9. Java:为什么需要包装类?
- 10. 为什么Java中有包装类?
- 11. 为什么JAX-WS需要包装类?
- 12. 包装C#CLI类为C#
- 13. Objective-C中包装C++类
- 14. 什么是最好的方式来包装第三方类c#
- 15. C#透明窗体
- 16. C#透明按钮
- 17. 透明的ListView C#
- 18. 术语“不透明类型”在“CFBundleRef不透明类型”的上下文中是什么意思?
- 19. 背景是什么:透明url();做?
- 20. 什么是不透明的字段?
- 21. 为什么point()函数稍微透明?
- 22. 需要透明类型的好处和情况是什么?
- 23. 什么是榆树中的不透明类型,为什么它很有价值?
- 24. C++什么放在一个类声明,什么不是
- 25. 什么是包括用C
- 26. PDO包装类包装类
- 27. .NET中C++的包装类?
- 28. C++语义类型包装
- 29. C++头包装声明[]转换
- 30. 什么不透明的内容究竟意味着什么?
这个词我是从 '谷歌C++风格指南' 了。它说:“我们要求所有单个参数构造函数都是显式的,而打算成为其他类的透明包装的类是例外。”仅供参考http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Explicit_Constructors#Explicit_Constructors。所以我好奇什么是“透明类包装” – 2013-05-07 03:58:23