C++ 如何在C++;11在运行时?
我创建了一个套接字包装器。可以使用两个模板对其进行实例化:C++ 如何在C++;11在运行时?,c++,c++11,templates,variant,C++,C++11,Templates,Variant,我创建了一个套接字包装器。可以使用两个模板对其进行实例化: Socket<asio::ip::udp> Socket<asio::ip::tcp> Socket 插座 在一个单例类中,我想实例化其中一个,但我得到了一个运行时参数,可以做出选择。如何在运行时实例化其中一个 我知道boost::variant,有没有一种没有它的方法?你不能用一种好的方法。一种可能性是有一个抽象基类,它继承自。然后你可以有一个工厂函数,它返回一个指向基类的指针,并创建正确的实例。@Some
Socket<asio::ip::udp>
Socket<asio::ip::tcp>
Socket
插座
在一个单例类中,我想实例化其中一个,但我得到了一个运行时参数,可以做出选择。如何在运行时实例化其中一个
我知道boost::variant,有没有一种没有它的方法?你不能用一种好的方法。一种可能性是有一个抽象基类,它继承自。然后你可以有一个工厂函数,它返回一个指向基类的指针,并创建正确的实例。@Someprogrammerdude该基类必须有虚拟方法,这使得模板有点毫无意义。对吧?@怪诞的并不是毫无意义的。这将消除他们“不需要虚拟调用”的速度优势,这只有在代码对时间足够关键的情况下才重要。“只编写一次代码来处理不同类型的代码”的优点仍然存在。@也许有些奇怪。但正如我所说,没有好的方法来做。注意,C++使用模板而不是泛型。这意味着实例化发生在构建时,而不是运行时:必须为程序中的每个实例化编译一个不同的类。这也意味着模板不是解决问题的直接工具。在OO编程中,自然设计将是一些编程人员建议的一个公共基类<代码>标准:变体或基于
void*
的任何其他方式也可能有帮助。最好的方法取决于大量的参数,包括您已经使用过的参数,并且您更了解这些参数。