C ++模板:自动为成员提供成员所有者类

时间:2012-09-25 11:58:30

标签: templates visual-c++

我正在编写我的'属性'类来摆脱set并从我的代码中获取内存。 我几乎成功地取得了成功,但我想向班级成员提供“所有者班级”。

目前我应该使用这样的属性:

class PropertyUser
{
private:
PROPERTY_PROVIDE(PropertyUser);
                 ^^ I should provide the current class manually here.
public:
PROPERTY_DECLARE(~);
};

我最后一次尝试了很多:

template<typename T>
struct OwnerClassTrait
{ };

template<typename T, class C>
struct OwnerClassTrait<T C::*>
{
    typedef C Class;
};

#define PROVIDE_CURRENT_CLASS() \
    void __Dummy_Func__(){ }; \
    typedef OwnerClassTrait<decltype(&__Dummy_Func__)>::Class CurrentClassType

#define SOME_FUNCTION(Name) \
    SomeOtherMember<CurrentClassType> Name

class Foo
{
public:
    PROVIDE_CURRENT_CLASS();
    SOME_FUNCTION(ThisTypeAutomaticallyDetectsCurrentClassType);
};

它给了我错误:错误C2039:'Class':不是'OwnerClassTrait'的成员 我认为这意味着decltype是错误的(删除当前范围类C::)为OwnerClassTrait提供类型。

请注意,我现在正在使用vs2012。 我有些不对劲吗? 或者有另一种方法可以很好地解决这个问题?

0 个答案:

没有答案