如何访问作为枚举的嵌套模板参数



假设我有一个类模板,它采用下面的枚举参数A。我有另一个类模板,B。我实例化了A上专用的B对象,如下所示:

enum class Colours { red, green, blue };
template <Colours C>
class A {};
template <typename T>
class B {};
B<A<Colours::red>> myObj;

如何访问B定义中的颜色C

谢谢!

我喜欢SergeyA的回答,并在这里提供了这个完全有效的例子。

#include <iostream>
enum class Colours { red, green, blue };
template <auto C> // vscode complains about the use of auto here
class A {
public:
static constexpr auto value = C;
};
template <typename T>
class B {
public:
int operator()() { return static_cast<int>(T::value); }
};
B<A<Colours::red>> red;
B<A<Colours::green>> green;
B<A<Colours::blue>> blue;
int main() {
std::cout << red() << ", " << green() << ", " << blue() << std::endl;
// 0, 1, 2
}

这编译&以g++8运行-std=c++17。我很惊讶你能用auto:-(做什么

使用E=E添加;到A的行未编译。

事实并非如此。但你可以这样做:

template <auto E_>
class A {
public: static constexpr auto E = E_;
};

它按预期编译和工作。这是假设C++17。

最新更新