假设我有一个类模板,它采用下面的枚举参数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。