c_cpp 使用C ++ 11模板模板参数通过链接继承添加伪方面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 使用C ++ 11模板模板参数通过链接继承添加伪方面相关的知识,希望对你有一定的参考价值。
#include <iostream>
/*=======================================================================
* ASPECT COMPOSITION
*======================================================================*/
template<class Parent>
struct Nil_aspect: public Parent
{
void tell() {} // no-op, and ends the chain
};
template<class Parent, template<class> class ...Aspects> class Aspect_composer;
template<class Parent, template<class> class Aspect>
class Aspect_composer<Parent, Aspect>: public Aspect< Nil_aspect<Parent> > {};
template<class Parent, template<class> class FirstAspect, template<class> class ...OtherAspects>
class Aspect_composer<Parent, FirstAspect, OtherAspects...>: public FirstAspect< Aspect_composer<Parent, OtherAspects...> > {};
template<class Parent>
class Aspect1: public Parent
{
public:
Aspect1() { std::cout << "Aspect1 here" << std::endl; }
void tell() {
std::cout << "Hello from Aspect1" << std::endl;
Parent::tell();
}
};
template<class Parent>
class Aspect2: public Parent
{
public:
Aspect2() { std::cout << "Aspect2 here" << std::endl; }
void tell() {
std::cout << "Hello from Aspect2" << std::endl;
Parent::tell();
}
};
template<class Parent>
class Aspect3: public Parent
{
public:
Aspect3() { std::cout << "Aspect3 here" << std::endl; }
void tell() {
std::cout << "Hello from Aspect3" << std::endl;
Parent::tell();
}
};
class My_base {
public:
My_base() { std::cout << "My_base here" << std::endl; }
};
class My_class: public Aspect_composer<My_base, Aspect1, Aspect2, Aspect3>
{
};
int main()
{
My_class obj;
obj.tell();
std::cout << std::endl << "Press RETURN to terminate" << std::endl;
char dummy; std::cin >> std::noskipws >> dummy;
return 0;
}
以上是关于c_cpp 使用C ++ 11模板模板参数通过链接继承添加伪方面的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 使用c ++ 11模板快速排序实现
c_cpp C ++ 11竞争性编程模板
C++11之模板别名&函数模板的默认模板参数
c_cpp FibonacciN使用模板
C++11新特性:9—— C++11在函数模板和类模板中使用可变参数
c_cpp C ++模板强制使用函数返回值。