小编tir*_*til的帖子

模板对象的类似访客的模式

我\xe2\x80\x99m 试图为学术目的制作一个自定义碰撞引擎,但我陷入了一般的 C++ 编程问题\n我已经拥有了所有可以正常工作的几何图形,并且对于问题的范围,我有这个函数:

\n\n
template<typename lhs_geometry, typename rhs_geometry>\nbool intersects( const lhs_geometry& lhs, const rhs_geometry& rhs )\n{\n    //returns true if does objects intersects \n    //(assume this functions works perfectly with every geometry type)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还有以下课程需要完成实施

\n\n
template<typename geometry_type>\nclass collidable_object\n{\npublic:\n    explicit collidable_object( geometry_type& geometry ) :\n        m_geometry( geometry )\n    {\n\n    }\n\n    ~collidable_object()\n    {\n\n    }\n\nprivate:\n    geometry_type& m_geometry;\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我想创建一个列表collidable_object并测试它们是否有 2 × 2 的交集时,我的问题就出现了。

\n\n

我在 Google 上做了一些研究,发现有一个基类可以collidable_object让我将对象存储到列表中。但之后我如何根据对象的具体几何形状来测试对象呢?

\n\n

我尝试实现访问者模式,但每次都会陷入困境,因为我不想对每种可能的几何类型进行硬编码,因为我总是只调用intersetcs().

\n\n

我还找到了一篇关于合作访客的文章,但这似乎很复杂。

\n\n

有谁有简单有效的解决方案吗?

\n\n …

c++ templates double-dispatch c++11

5
推荐指数
1
解决办法
1073
查看次数

C++中的C#样式枚举

我正在尝试编写一个使用外部工具的日志库

我正在寻找方便的方法将键字符串添加到输出流,以帮助外部工具解析,同时使用库对程序员的影响最小

目标是实现这样的目标:

cout << DEBUG::VERBOSE << "A should equal 3" << endl;
cout << DEBUG::WARNING << "something went wrong" << endl;
Run Code Online (Sandbox Code Playgroud)

现在,我将数据结构如下

struct Debug
{
static const std::string FATAL_ERROR; 
static const std::string ERROR;
static const std::string WARNING;
static const std::string IMPORTANT;
static const std::string INFORMATION;
static const std::string VERBOSE;
static const std::string DEBUG;
};
Run Code Online (Sandbox Code Playgroud)

这个工作找到但我想从std::string类型中添加一个抽象级别.

在Java/C#中我可以用a enum来实现写行为,我怎样才能在C++中优雅地实现它.

c++ iostream abstraction design-patterns

1
推荐指数
1
解决办法
191
查看次数