让我们假设,我们有一个模板功能:
template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}
Run Code Online (Sandbox Code Playgroud)
现在我们想将它用作另一个模板中的参数,例如像那样
template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
我知道我可以使用带有defined()运算符的结构.我只是对功能感到好奇.
编辑:
当我写这个问题时,我的朋友发现了一个部分解决方案:
template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}
Run Code Online (Sandbox Code Playgroud)
但是仍然 - 如果没有在调用之前实现函数类型的实现,我很好奇.例如 - 我可能想要使用各种类型组合调用传递的模板:
template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 …
Run Code Online (Sandbox Code Playgroud) 我正在学习Smalltalk的基础知识.有一个super
关键字用于从子类方法中的超类调用方法:
Object subclass: # A
test
^1
A subclass: # B
test
^2
callSuper
^super test
Run Code Online (Sandbox Code Playgroud)
所以B new callSuper
评估为1
.
好.这很清楚.
所以现在,我正在为B
类定义一堆类方法:
createNew1
^super new
createNew2
^self new
create
^self
createSuper
^super
Run Code Online (Sandbox Code Playgroud)
他们分别计算结果为a B
,a B
,B
和一个错误(这说明我super
是不是继承而是一种消息分派器的投).
为什么我会在关键字的情况下获得B
课程实例super
?a B
和B
对象有什么区别?我开始认为B
对象是一个特殊的,单一的实例(就像static
属性在其他语言中实现的)B
,但仍然 - 我已经检查过它的类是一个B
和子类是一个A
.
super
类方法中关键字的语义是什么?它与对象方法中的语义有何不同?通过调用self
类方法可以获得的对象究竟是什么?