2

我想通过从一种或另一种类型派生来启用或禁用类中的某些功能。在我为导出条件引入另一个级别的间接之前,一切都运行良好。

例子:

template<bool EnableB>
struct Traits1
{
    static const bool BEnabled = EnableB;
};

template<bool EnableB>
struct Traits2
{
    static const bool BEnabled;
};

template<bool EnableB>
const bool Traits2<EnableB>::BEnabled = EnableB;

struct A{};
struct B : public A{};

template<typename Traits>
struct C : public std::conditional<Traits::BEnabled, B, A>::type
{
};


int main()
{
    C<Traits1<true>> c1; //OK
    C<Traits2<true>> c2; //error C2975: '_Test' : invalid template argument for 'std::tr1::conditional', expected compile-time constant expression
}

初始化我的内部类我不会有任何问题Traits,但只能在类内部初始化整数类型......

你能解释一下为什么会出现这个问题吗?我的编译器(VS2010)有问题还是这是正常行为?

4

1 回答 1

0

使用 GCC 4.7(在 Mac OS 上)似乎可以正常工作。我将把它作为编译器的缺点。如果你愿意的话,也许可以在 Windows 上尝试 GCC。

于 2013-04-29T12:25:26.903 回答