Mar*_*tin 6 c++ metaprogramming metaclass
在他的提案和CppCon 演讲中,Herb Sutter 建议将元类添加到 C++。这使用户在编译期间在创建和增强新类型方面具有更大的灵活性。提案中的示例之一是interface元类或the plain-struct元类的创建。
在当前执行的C ++的有三个关键词来声明类型:class,struct,和enum。
想象一下,我们创建了一个新的元类plain_struct,使我们能够编写如下代码
plain_struct User {
string name;
string surname;
};
Run Code Online (Sandbox Code Playgroud)
稍后我们可以有一个函数或一个类方法来接受一个模板参数,比如
template <typename T>
void printUser(T user) {
cout << user.name << " " << user.surname << endl;
}
/*
...
*/
User u("N", "S");
printUser(u);
Run Code Online (Sandbox Code Playgroud)
有没有办法重载这个函数,或者在运行时以某种方式检测传递给函数的对象printUser是否属于元类struct/class或自定义的plain_struct.
例如,是否有可能有这样的东西(下面的代码更像是一个伪代码,而不是实际工作的)?
template <class T>
void printUser(T user) {
cout << "User is of metaclass class";
}
template <plain_struct T>
void printUser(T user) {
cout << "User is of metaclass plain_struct";
}
/*
...
*/
User u("N", "S");
printUser(u); // prints "User is of metaclass plain_struct"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |