Python中与C++模板最有效的等价物是什么?例如,我将如何实现以下内容:
template<unsigned X, unsigned Y>
class SomeType {
...
}
我现在的想法是使用类似的东西:
def FooFactory(*params):
class FooCreated:
# do stuff with params
...
return FooCreated
但这感觉非常古怪。创造这种行为的最好方法是什么?
在我的例子中,我还需要FooCreated能够被子类化。
2条答案
按热度按时间ctzwtxfj1#
tl;dr:这是无意义的,你不需要一个等价物。
模板是一种允许编译时多态的C机制:当用不同的类型示例化时,会生成不同的代码-它们的行为可能不同。它可以是一个模板化的函数,也可以是一个模板化的类,就像你的例子一样。这一点很重要,因为一般来说,C是一种静态类型语言。因此,如果您有:
那么
SomeType<3>
和SomeType<4>
是完全不同的类型。你不能把一个示例赋值给另一个示例,你不能把一个示例传递给一个接受另一个示例的函数,等等。实际上,即使a
成员实际上根本不依赖于X
,它们也是完全不同的。Python是一种动态类型语言。因此,您可以定义一些变量,用一种类型的值初始化它,然后用另一种类型的值完全替换该值。用C++的术语来说,就好像你有一个
int x = 123;
,你给它赋值std::string("hello")
--它就变成了一个值为"hello"s
的std::string x
。当你的语言有了这个功能,你就不需要为示例化不同成员类型的模板而烦恼了--你只需要把你喜欢的任何类型的值放在一个变量中,或者一个列表的元素中,或者其他什么。参见:
nzk0hqpo2#
下面是我在Python中如何表达模板类的东西:
然后,无论你想 * 专门化模板 *: