小编Woj*_*tak的帖子

是否可以将函数模板作为模板参数传递?

让我们假设,我们有一个模板功能:

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)

c++ templates template-meta-programming

10
推荐指数
1
解决办法
261
查看次数

类方法中的"超级"关键字

我正在学习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课程实例supera BB对象有什么区别?我开始认为B对象是一个特殊的,单一的实例(就像static属性在其他语言中实现的)B,但仍然 - 我已经检查过它的类是一个B和子类是一个A.

super类方法中关键字的语义是什么?它与对象方法中的语义有何不同?通过调用self类方法可以获得的对象究竟是什么?

inheritance smalltalk class-method

6
推荐指数
1
解决办法
1540
查看次数