考虑以下代码 list :
#include <iostream>
#include <typeinfo>
class Interface { };
template<typename T>
class Class : public Interface { };
template<typename T>
Interface *producer() {
std::cout << "produced " << typeid(T).name();
return new Class<T>();
}
template<typename T>
void consumer(Class<T> *class_value) {
std::cout << "consumed " << typeid(T).name();
}
void mediator(Interface *value) {
/* The magic happens here */
consumer(class_value);
}
int main() {
Interface *value = producer<int>();
mediator(value);
}
是否有任何可能的方法从“中介”函数调用“消费者”模板函数?
最佳答案
如果稍微改变一下设计,就可以让派生类来完成这项工作:
class Interface
{
virtual void consume() = 0;
virtual ~Interface() {}
};
void mediator(Interface * value)
{
value->consume();
}
template <typename T>
void consumer(Class<T> * class_value)
{
std::cout << "consumed " << typeid(T).name();
}
template <typename T> class Class : public Interface
{
virtual void consume() override
{
consumer<Class>(this);
}
// ...
};
关于C++ - 恢复模板或转换为模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538637/