- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我正在使用来自 Boost Vault 的类型安全枚举类:
Which Typesafe Enum in C++ Are You Using?
我发现很难有一个父类指针来引用所有枚举类,因为 Boost::enum 是一个模板类:boost::detail::enum_base<T>
我正在使用 void fun(const boost::any& any)
, 接受任何枚举类。但是,我需要在执行迭代之前将它们转换为枚举类。我无法转换为基类 boost::detail::enum_base<T>
,因为我没有关于 T 将是什么的信息。
关于如何解决这个问题有什么建议吗?
其中一个要求是,函数参数必须在 boost::any 中。
#include <iostream>
#include <boost/any.hpp>
#include "boost/enum.hpp"
// this macro
BOOST_ENUM(boolean,
(True)
(False)
)
// expands to this enum model
namespace expanded
{
class boolean : public boost::detail::enum_base<boolean>
{
public:
enum domain
{
False,
True,
};
BOOST_STATIC_CONSTANT(index_type, size = 2);
public:
boolean() {}
boolean(domain index) : boost::detail::enum_base<boolean>(index) {}
typedef boost::optional<boolean> optional;
static optional get_by_name(const char* str)
{
if(strcmp(str, "False") == 0) return optional(False);
if(strcmp(str, "True") == 0) return optional(True);
return optional();
}
private:
friend class boost::detail::enum_base<boolean>;
static const char* names(domain index)
{
BOOST_ASSERT(static_cast<index_type>(index) < size);
switch(index)
{
case False: return "False";
case True: return "True";
default: return "";
}
}
};
}
BOOST_ENUM(boolean2,
(True2)
(False2)
)
/* I want to have a function to accept any enum class. How? */
void fun(const boost::any& any)
{
/* How about boolean2 enum? How can I have a common pointer to point to enum class? */
const boolean* d = boost::any_cast<boolean *>(any);
/* I want to use unofficial boost::enum, because it allows me to iterate through enum's members. */
for (boolean::const_iterator iterator = d->begin(); iterator != d->end(); iterator++)
{
boolean x = *iterator;
std::cout<< "Iterate through enum : "<< x<< std::endl;
}
}
int main()
{
boolean b = boolean::True;
boolean2 b2 = boolean2::True2;
/* Assume until this stage, during runtime, I have no clue b is either boolean or boolean2. */
fun(&b);
/*
* Runtime error occur here.
* throw enable_current_exception(enable_error_info(e));
*/
fun(&b2);
getchar();
}
最佳答案
如果不能通过基类访问,使用函数模板:
template<class TE> // should be a boost enum
void fun(TE& en)
{
for (TE::const_iterator it = en.begin(); it != en.end(); ++it)
{
/* ... */
}
}
关于公共(public)基指针:
您不能按照定义 boost 枚举的方式使用其中之一。它没有单个基类,而是每个枚举类型和每个(可选)值类型都有单独的基类。
此外,boost enum 的要点是静态类型安全 - 如果您要求的是基于运行时决策的不同枚举类型,那么您使用的是错误的工具。
更新:
如果你真的有不可变的要求,你可以基于 boost::any::type
的显式转换,例如(利用上面给出的函数模板):
const std::type_info& ti = any.type();
if(ti == typeid(boolean*)) {
fun(*boost::any_cast<boolean*>(any));
} else if(ti == typeid(boolean2*)) {
/* ... */
}
关于c++ - 持有 boost 枚举的基类指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778191/
来自 Java/C# 背景,我正在尝试实现一个空安全检查对象。以下代码尝试检查对象上是否确实存在颜色。如果有,我希望能够做一些事情(比如在形状上绘制颜色)。我希望能够将此颜色设置回 null (non
目前,我正在使用来自 Boost Vault 的类型安全枚举类: Which Typesafe Enum in C++ Are You Using? 我发现很难有一个父类指针来引用所有枚举类,因为 B
假设我设置了一个存储库。我希望有的用户可以推送,有的用户我想先过一遍推送的内容再批准。有条件推送之类的概念吗?待批准推送队列? 最佳答案 您本质上需要一个代码审查工具。 git 有一些,但最好的可能是
我使用 Windows 版 git bash 和 Beyond & Compare 作为我的差异工具(但同样的事情发生在任何外部差异工具上)。 我希望我的终端不要等待 difftool 退出以返回终端
这个问题在这里已经有了答案: SVN: Is there a way to mark a file as "do not commit"? (18 个回答) 8年前关闭。 在某些情况下,作为开发环境设
Jcombobox 可以保存 int 吗?因为我尝试了这个并收到错误。 int[] timeSched = new int[] {200,300,400,500}; JComboBox Jcombo1
最近,我开始为我的游戏制作 map 编辑器,遇到了一些问题,我已经解决了这些问题。我现在的问题是我有一个 JFrame (主界面)。在该 JFrame 中,我有一个 JScrollPane,其中包含我
ElementAdapter类 package com.example.sierendeelementeninbreda; import android.content.Context; import
我能以某种方式将 jquery 对象作为 javascript 对象的键吗? (编辑)..作为关键.. var $a = $("#a"); var $b = $("#b"); var c = {};
我分两步解码 jpeg。 检查边界,必要时确定比例。 在屏幕限制内解码。 public static Bitmap decodeSampledBitmapFromInputStream(InputSt
谁能告诉我为什么下面代码中 $mytextarea 的范围没有扩展到 getAnswerToo() 函数中? getAnswer() 之所以有效,是因为我明确选择了要更新的元素。但是,尝试使用全局“处
如果我有实现接口(interface) I 的类 A 并将它传递到需要接口(interface) I 的地方,例如传递给线程,将这会阻止 GC 对 A 类的实例进行垃圾回收?我想是的,但我该如何解决呢
我正在使用 Swift3 和 Xcode 8.3.3 我正在研究持有 UICollectionView 的 UITableViewCell。每个 CollectionView 单元格都需要执行 seg
我正在使用 CVMetalTextureCacheCreateTextureFromImage 从 CVImageBuffer(来自相机和播放器)创建一个 MTLTexture 以获得 CVMetal
我有三个类:HopBill、HopBillController 和 HopBillSheetController。 HopBill 创建一个包含 NSMutableArray 的对象。出于测试目的,我
一些 Powermock/Mockito 文章提到了使用 PowerMock.mockStaticPartial 方法 - 唯一的问题是我在任何地方都找不到它! 有谁知道它存在于哪个 Artifact
我有一个显示新闻条目详细信息的 ViewPager。您可以在 30 个条目之间来回滑动。这些条目中的每一个都是一个包含 ImageView 的 View 。此 ImageView 使用 Picasso
操作应尽量保持与原始输入类型相同的答案,因此如果持有者以 Double 开头,则结果也应该是 double。 如果输入包含不同数字类型的持有者,那么它应该自动加宽等。 应该有一种带有 getter 的
比如,如果我编写如下所示的代码: const int & const_value = 10; 与看起来像这样的代码相比,我有什么优势: int value = 10; 或 const int cons
我在 Windows XP(代码:Block,MinGW)和 Ubuntu(11.04,G++)上运行了以下两段代码 我无法运行以下代码 #include using namespace std;
我是一名优秀的程序员,十分优秀!