17 c++ g++ visual-c++ clang++
有没有办法为typedef声明的(周围)类型本身构建一个类型声明,而不说明类型的名称?
例:
class X
{
public:
typedef <fill in magic here> MyType;
//...
};
Run Code Online (Sandbox Code Playgroud)
背景:这看起来很傻.我需要这个,因为我使用宏构建了数据类的编译时反射.因此,在数据类的声明中插入了一个宏,需要处理它所插入的类型.到目前为止,我找到了MSVC和g ++的工作解决方案,它们都依赖于我认为在实现中存在的缺陷.因此他们可能无法使用更新的版本.Clang不会"吃掉"这些解决方案.
我当前的MSVC解决方案定义了一个方法,然后仅通过它的名称获取它的地址,并调用一个"返回"它的类的类型的小帮助器.(Clang和g ++期望方法的全名,包括它的类名).
我目前的g ++解决方案定义了一个带返回类型的静态方法std::remove_reference(decltype(*this)).(Clang和MSVC this在静态上下文中不允许).
我绝对更喜欢标准的一致性解决方案,但对于clang的特殊解决方案目前也可以.
如果没有任何作用,我必须将类的名称传递给宏,但我尽量避免这种情况,因为我已经有足够的代码使用宏.
编辑:添加一个关于反射如何工作的样本(这可能会澄清我需要的东西):
class X : public Y
{
public:
//.. constructor and such stuff...
int a;
double b;
std::string c;
CLASSHEAD(Y)
FIELD(a)
FIELD(b)
FIELD(c)
CLASSFOOT
};
Run Code Online (Sandbox Code Playgroud)
CLASSHEAD是应该定义的宏typedef.它是VAR_ARGS宏,其中参数接收基类.如上所述:可以给它类名称作为它的第一个参数(CLASSHEAD(X, Y)在示例中得到).但我几乎无法想象没有解决这种"简单"任务的方法,如对周围类型的类型...
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |