由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - template 疑问
相关主题
a c++ question请教一个boost::bind的问题
请教一下这个template function在gcc下要怎么修改文一个简单的c++
C++ template question谁给详细说一下这句
一个C++ template的问题请问这是什么错误呀
[菜鸟问题]类模板问题这段 C++ 怎么改才能编译?
c++ template question:C++ namespace 弱问
C++ 菜鸟问一个关于template 的问题。C++ linking 弱问 (one file)
C++ template Questions (转载)问个c++的template的问题
相关话题的讨论汇总
话题: seq话题: class话题: function话题: member话题: template
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
template
void apply(Seq& sq, R(T::*f)(A) const, A a) {
typename Seq::iterator it = sq.begin();
while(it != sq.end())
((*it++)->*f)(a);
}
请问
1. how does the compiler understand T::*f? a member function of T, which
returns R and take A? what does "f" represent?
2. if i change T::*f to be T::*g, all other code remain the same, is this
still alright?
d****p
发帖数: 685
2

Yes
OK if you change *f(a) to *g(a). It just is a parameter name

【在 z****e 的大作中提到】
: template
: void apply(Seq& sq, R(T::*f)(A) const, A a) {
: typename Seq::iterator it = sq.begin();
: while(it != sq.end())
: ((*it++)->*f)(a);
: }
: 请问
: 1. how does the compiler understand T::*f? a member function of T, which
: returns R and take A? what does "f" represent?
: 2. if i change T::*f to be T::*g, all other code remain the same, is this

z****e
发帖数: 2024
3
这个 *f 根本就没有声明,怎么能直接就用呢?
而且原来的T里边,对应的函数,也不叫f呀。
从来没有见过这种,没有声明过的identifier。
而且如果是T里边的,至少要用typename意思一下吧。
很糊涂。

【在 d****p 的大作中提到】
:
: Yes
: OK if you change *f(a) to *g(a). It just is a parameter name

d****p
发帖数: 685
4

Aren't declaring it in the parameter list?
It is a pointer to member function, not a specific member function.
It is not a type; it is a variable.

【在 z****e 的大作中提到】
: 这个 *f 根本就没有声明,怎么能直接就用呢?
: 而且原来的T里边,对应的函数,也不叫f呀。
: 从来没有见过这种,没有声明过的identifier。
: 而且如果是T里边的,至少要用typename意思一下吧。
: 很糊涂。

z****e
发帖数: 2024
5
我貌似明白了许多。

【在 d****p 的大作中提到】
:
: Aren't declaring it in the parameter list?
: It is a pointer to member function, not a specific member function.
: It is not a type; it is a variable.

d****p
发帖数: 685
6

~~~~ :-)
There are two small issues in the code.
1. Since the member function is const, the iterator should better be const
iterator
2. It is a perfect case to illustrate use of functor. The code you showed
have two performance problems (1).
the seq.end() is called multiple times (2) the f cannot be inlined due to
use of member function pointer. It will
if we use functor to replace the function pointer.

【在 z****e 的大作中提到】
: 我貌似明白了许多。
1 (共1页)
进入Programming版参与讨论
相关主题
问个c++的template的问题[菜鸟问题]类模板问题
C++ template questionc++ template question:
Cannot use my own container as the underlying container of a stack? (c++)C++ 菜鸟问一个关于template 的问题。
一个关于C++ template和overload的问题C++ template Questions (转载)
a c++ question请教一个boost::bind的问题
请教一下这个template function在gcc下要怎么修改文一个简单的c++
C++ template question谁给详细说一下这句
一个C++ template的问题请问这是什么错误呀
相关话题的讨论汇总
话题: seq话题: class话题: function话题: member话题: template