我想实现这样的一种:
class A { void test1(); void test2(); }; class B { void test1(); void test2(); }; template<class T> class sender { public: void runtest1() { T t; t.test1(); } void runtest2() { T t; t.text2(); } };
但是我们有时候想标记是哪个类执行的函数,想做日志信息。所以可以这样:
template<class T> class senderlog:public sender<T> { public: void test1log() { // log记录 runtest1(); // log记录 } }; // 但是不能通过编译
因为编译器不知道它继承什么样的class。它继承的是sender<T>,但是其中的T是个模板参数,不到后来被具现化无法确切知道它是什么。或者说根本不知道它有没有sender函数。
详细点说,假设有个类,它只有一个函数:
class C
{
void test1();
};
这个时候就需要一个特化版本:
template<>
class sender<C>
{
public:
void runtest1()
{
C c;
c.test1();
}
};
template<class T>
class senderlog:public sender<T>
{
public:
void test1log()
{
// log记录
this->runtest1();
// log记录
}
};
template<class T>
class senderlog:public sender<T>
{
public:
using sender<T>::runtest1();
void test1log()
{
// log记录
runtest1();
// log记录
}
};
template<class T>
class senderlog:public sender<T>
{
public:
void test1log()
{
// log记录
sender<T>::runtest1();
// log记录
}
};
?