Functor Disfunction:
在c ++中,有没有办法让模板类的实例知道它的类型?例如,我有一个类functor,碰巧使用两个typename模板参数。一个用于函数的返回类型,一个用于参数类型。我想要一种存储这两种类型的方法,这样我以后就可以轻松地使用仿函数而不需要传递类型。
为什么:
我有一个线程池类,我想将所有这些函子存储在其中,并且我希望能够处理多种类型的函数。所以我认为有必要知道函数的类型,所以我可以稍后调用该函数,同时将它存储在一个不基于模板的类中(当然除了set_function / set_parameter方法)。
答案 0 :(得分:2)
您可以为模板类型创建typedef,例如:
template <typename T>
class X {
typedef T value_type;
};
然后可以像这样引用那种类型:
void* p = /* some initialization to an X<int>::value_type */;
X<int>::value_type* x = static_cast<X<int>::value_type*>(p);
答案 1 :(得分:0)
如果我不得不猜测你正在做什么/你想要什么,那就是这样的。 (这是猜测你实际想要什么的信念的完全飞跃,而不是你想要的说。
class interface {
public:
virtual std::unique_ptr<interface> create() const =0; //virtual "constructor"
virtual bool is_same_type(const interface* ptr) const =0; //type comparison
virtual void func() =0; //function
virtual ~interface() {}
};
template<class T>
class instantiation : public interface
{
public:
virtual std::unique_ptr<interface> create() const
{ return std::unique_ptr<interface>(new instantiation()); }
virtual bool is_same_type(const interface* ptr) const
{ return dynamic_cast<instantiation*>(ptr) != NULL; }
virtual void func() {}
virtual ~interface(){}
};
通过这个概念,您可以创建一个容器存储interface
,并且他们“记住”它们的类型足以使用相同的模板创建新实例,并比较它们是否具有与另一个相同的模板。
(感谢Xeo将手机短信翻译成适当的C ++)