相关疑难解决方法(0)

类型擦除技术

(对于类型擦除,我的意思是隐藏有关类的一些或所有类型信息,有点像Boost.Any.)
我想要掌握类型擦除技术,同时也分享那些,我知道.我希望找到一些有人在他/她最黑暗的时刻想到的疯狂技巧.:)

我所知道的第一个也是最明显的,也是最常用的方法是虚函数.只需在基于接口的类层次结构中隐藏类的实现.许多Boost库都这样做,例如Boost.Any这样做是为了隐藏你的类型,而Boost.Shared_ptr这样做是为了隐藏(de)分配机制.

然后有一个函数指针指向模板化函数的选项,同时将实际对象保存在void*指针中,如Boost.Function确实隐藏了仿函数的实际类型.可以在问题的最后找到示例实现.

所以,对于我的实际问题:
你知道其他什么类型的擦除技术?如果可能的话,请提供示例代码,用例,您对它们的体验以及可能的进一步阅读链接.

编辑
(因为我不确定是否将此作为答案添加,或者只是编辑问题,我只会做更安全的问题.)
另一个很好的技术来隐藏没有虚函数或void*摆弄的东西的实际类型,是一个GMan在这里工作,与我的问题有关,这个问题究竟是如何运作的.


示例代码:

#include <iostream>
#include <string>

// NOTE: The class name indicates the underlying type erasure technique

// this behaves like the Boost.Any type w.r.t. implementation details
class Any_Virtual{
        struct holder_base{
                virtual ~holder_base(){}
                virtual holder_base* clone() const = 0;
        };

        template<class T>
        struct holder : holder_base{
                holder()
                        : held_()
                {} …
Run Code Online (Sandbox Code Playgroud)

c++ type-erasure

129
推荐指数
6
解决办法
3万
查看次数

何时使用void指针?

我理解使用void指针来实现malloc.

void* malloc  ( size_t size );
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出其他原因或提供一些在实践中有用的场景.

谢谢

c c++ pointers

42
推荐指数
4
解决办法
3万
查看次数

c ++模板会使程序变慢吗?

我从许多人那里听说过使用模板会使代码变慢.这是真的吗?我正在建立一个图书馆.有些地方如果没有创建模板,就会导致代码管理问题.截至目前,我可以想到两个解决这个问题的方法:

  • 使用#defines

  • 使用模板并在头文件/库本身中定义所有可能的类型,但不允许最终用户创建模板实例.

例如typedef Graph<int> GraphI32;

无论如何,是否限制用户自己创建各种模板实例.

对上述查询的帮助将受到高度重视.

c++ performance templates

36
推荐指数
5
解决办法
2万
查看次数

标签 统计

c++ ×3

c ×1

performance ×1

pointers ×1

templates ×1

type-erasure ×1