C++ 使用模板化类的成员结构
是否可以使用模板类的成员C++ 使用模板化类的成员结构,c++,c++11,c++17,C++,C++11,C++17,是否可以使用模板类的成员struct或enum class,而无需显式指定模板参数。例如: template<typename A, typename B> class Foo { public: enum class Status {E1, E2, E3}; }; void func() { auto e = Foo::Bar::E1; } 模板 福班{ 公众: 枚举类状态{E1,E2,E3}; }; void func(){ 自动e=Foo::Bar::E1; }
struct
或enum class
,而无需显式指定模板参数。例如:
template<typename A, typename B>
class Foo {
public:
enum class Status {E1, E2, E3};
};
void func() {
auto e = Foo::Bar::E1;
}
模板
福班{
公众:
枚举类状态{E1,E2,E3};
};
void func(){
自动e=Foo::Bar::E1;
}
我想我明白了一点,编译器需要实例化
Foo
,给定它的模板参数,但只是想知道是否有办法仍然使用它的成员类。如果类型不是很重要,而您只想访问enum类,那么您可以键入def它
using Bar = Foo<void, void>;
void func() {
auto e = Bar::Status::E1;
}
使用Bar=Foo;
void func(){
自动e=Bar::Status::E1;
}
我认为您的另一个选择是显式编写类型或在命名空间范围中声明enum类C++不允许在不传递模板参数的情况下使用模板类。但是,如果您的需求不限于两个模板参数,则有一个变通方法 解决办法: 您可以将类Foo定义为可变模板。这将使您能够在不向类Foo传递参数的情况下使用enum。示例如下:
template<typename ...A>
class Foo {
public:
using Bar = enum class Status {E1, E2, E3};
};
void func() {
auto e = Foo<>::Bar::E1;
}
模板
福班{
公众:
使用Bar=enum类状态{E1,E2,E3};
};
void func(){
自动e=Foo::Bar::E1;
}
我不确定这是否会满足您的要求,但这将编译和工作。我确实是用c++17 flag编译的。问得好,但恐怕是重复的。不,你不能那样做。C++不这样工作。事实是,<代码> fo::状态< /> >与