使用 VS2005 在 Windows 上工作并努力理解我收到的错误消息。如果之前有人问过这个问题,我很抱歉。我找不到它。
我正在测试的类:
#include <functional>
using std::unary_function;
template<typename F, typename G>
struct UnaryConvolution : unary_function<typename G::argument_type,typename F::result_type>{
UnaryConvolution(const F &_f, const G &_g) : m_F(_f), m_G(_g){}
result_type operator()(const argument_type &_arg){
return m_F( m_G( _arg ) );
}
F m_F;
G m_G;
};
我写的单元测试:
using std::bind2nd;
using std::equal_to;
using std::less;
bool unaryConvolution_test(){
UnaryConvolution obj(bind2nd( equal_to<bool>(), true ), bind2nd( less<int>(), 5 ));
return obj( 3 );
}
和我遇到的错误:
- 错误 C2955:“UnaryConvolution”:类模板的使用需要模板参数列表
- 错误 C3848:类型为“UnaryConvolution”的表达式将丢失一些 const-volatile 限定符以调用“_Result UnaryConvolution::operator ()(const _Arg &)”
- 错误 C2514:“UnaryConvolution”:类没有构造函数
即使添加行 int val = 3
然后传递 val
也没有效果。 (顺便说一句,项目禁止使用 Boost 或任何 3rd 方库。不要问,我尽量不要。)
最佳答案
UnaryConvolution
是一个类模板,而不是一个类。您需要指定用于实例化模板的模板参数。例如,
UnaryConvolution<
function<bool(bool)>,
function<bool(int)>
> obj(bind2nd( equal_to<bool>(), true ), bind2nd( less<int>(), 5 ));
(我使用了 function
,您可以从 Boost、C++ TR1 或 C++0x 中获取它,来代替 bind2nd
的实际返回类型,这不是那么简单。如果您无法访问 function
的某些实现,那么您需要找出 bind2nd
的返回类型)
关于c++ - STL:卷积两个 unary_function 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669034/