C++ 带有`enum类的冗余语法`
假设我有一个模板类,其中我使用C++ 带有`enum类的冗余语法`,c++,c++11,C++,C++11,假设我有一个模板类,其中我使用enum类作为模板参数。下面是一个完整(微不足道)的示例: enum类动物类型{狗、猫、仓鼠}; 模板 类动物{ 公众: std::string speak(); }; 模板 std::string Animal::speak(){ 返回“纬”; } 模板 std::string Animal::speak(){ 返回“喵喵”; } 模板 std::string Animal::speak(){ 返回“Iä!Iä!Cthulhu fhtagn!”; } int ma
enum类
作为模板参数。下面是一个完整(微不足道)的示例:
enum类动物类型{狗、猫、仓鼠};
模板
类动物{
公众:
std::string speak();
};
模板
std::string Animal::speak(){
返回“纬”;
}
模板
std::string Animal::speak(){
返回“喵喵”;
}
模板
std::string Animal::speak(){
返回“Iä!Iä!Cthulhu fhtagn!”;
}
int main(){
动物犬;
动物猫;
动物仓鼠;
cout将类及其枚举类
放入一个名称空间,在该名称空间中它们可以有简短的名称:
namespace Animal {
enum class Type { Dog, Cat, Hamster };
template <Type>
class Animal {
public:
std::string speak();
};
template <>
std::string Animal<Type::Dog>::speak() {
return "Woof";
}
… etc
} // namespace Animal
如果类和命名空间具有相同的名称,则不能使用Animal::Type;
编写,因为这是不明确的。但可以使用全局范围符号明确表示您正在使用命名空间:
int main(){
using ::Animal::Animal;
using ::Animal::Type; // ok
Animal<Type::Dog> dog;
… etc
}
intmain(){
使用::动物::动物;
使用::Animal::Type;//确定
动物犬;
…等等
}
您可以使用typedef
为冗长的类名定义较短的别名,差不多就是这样。不确定添加的using语句是否真的不那么冗长,是否值得失去原始版本提供的简单性:)
int main(){
using Animal::Animal;
using Animal::Type; // error
Animal<Type::Dog> dog;
Animal<Type::Cat> cat;
… etc
}
int main(){
using ::Animal::Animal;
using ::Animal::Type; // ok
Animal<Type::Dog> dog;
… etc
}