由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个关于std::function的问题
相关主题
一个C++ template的问题请问c++中操作符可以声明为虚函数吗?
请教C++11的rvalue refconst reference in copy constructor
请教C++ call-by-ref & call-by-val的问题文一个简单的c++
a c++ questionC++ template question
谁给详细说一下这句C++ implicit typename的问题
请教一下这个template function在gcc下要怎么修改请问这是什么错误呀
where to define my template function这段 C++ 怎么改才能编译?
One c++ non-type template questionC++ namespace 弱问
相关话题的讨论汇总
话题: foo话题: std话题: void话题: function
进入Programming版参与讨论
1 (共1页)
y****n
发帖数: 15
1
请大牛们帮忙看看这段代码,在编译的时候会有如下error message 请问如何能编译通
过啊?跪谢!
当然这只是个虚构的例子,主要是想在template存在的情况下,传递一个member
function的指针给另一个member function.
test1.cpp: In member function 'void Foo::testInt()':
test1.cpp:30:61: error: no matching function for call to 'Foo::processVector
(std::vector&, std::_Bind_helper std::_Placeholder<1>&>::type)'
processVector(arr, std::bind(&Foo::print, this, _1));
^
test1.cpp:21:8: note: candidate: template void Foo::processVector(
const std::vector&, std::function)
void processVector(const vector& vec, function fun) {
^
test1.cpp:21:8: note: template argument deduction/substitution failed:
test1.cpp:30:61: note: 'std::_Bind(Foo*,
std::_Placeholder<1>)>' is not derived from 'std::function'
processVector(arr, std::bind(&Foo::print, this, _1));
------------------------------------
class Foo {
public:
template
void print(T val) {
cout << val << endl;
}
template
void processVector(const vector& vec, function fun) {
for (auto it=vec.begin(); it != vec.end(); ++it) {
fun(*it);
}
}
void testInt() {
int samples[] = {1,2,3};
vector arr(samples, samples+3);
processVector(arr, std::bind(&Foo::print, this, _1));
}
void testDouble() {
double samples[] = {0.1, 0.2, 0.3};
vector arr(samples, samples+3);
processVector(arr, std::bind(&Foo::print, this, _1));
}
};
p***o
发帖数: 1252
2
不用写那么具体, 这样就好。
template
void processVector(const V &vec, F fun) {
}

processVector
const

【在 y****n 的大作中提到】
: 请大牛们帮忙看看这段代码,在编译的时候会有如下error message 请问如何能编译通
: 过啊?跪谢!
: 当然这只是个虚构的例子,主要是想在template存在的情况下,传递一个member
: function的指针给另一个member function.
: test1.cpp: In member function 'void Foo::testInt()':
: test1.cpp:30:61: error: no matching function for call to 'Foo::processVector
: (std::vector&, std::_Bind_helper: std::_Placeholder<1>&>::type)'
: processVector(arr, std::bind(&Foo::print, this, _1));
: ^

d****l
发帖数: 51
3
根据编译的错误信息,processVector()的第二个变量被定义为std::function >,而在调用时传入的是std::_Bind_helper const std::_Placeholder<1>&>::type),编译器无法确定这二者是同一类型,因此报
错。你可以定义一个std::function变量然后把bind赋值给它(implicit
cast)之后在调用processVector时传入这个变量,或者直接static_cast (the
following code uses static_cast and works fine on my machine with gcc-4.8.0):
...
void testint()
{
...
processVector(arr, static_cast>(std::bind(&Foo::
print, this, _1)));
}
...
另外,二楼建议的写法更简洁一些.
1 (共1页)
进入Programming版参与讨论
相关主题
C++ namespace 弱问谁给详细说一下这句
C++ linking 弱问 (one file)请教一下这个template function在gcc下要怎么修改
find bugs of c++ codeswhere to define my template function
有段c++代码看不懂One c++ non-type template question
一个C++ template的问题请问c++中操作符可以声明为虚函数吗?
请教C++11的rvalue refconst reference in copy constructor
请教C++ call-by-ref & call-by-val的问题文一个简单的c++
a c++ questionC++ template question
相关话题的讨论汇总
话题: foo话题: std话题: void话题: function