ptr_fun - 无法创建类型?
ptr_fun - can't create a type?
我怎样才能做一些类似的事情:
#include <functional>
#include <boost/functional.hpp>
int foo(int){return 1;};
template<typename T>
int bar(T t)
{
return 10;/*or something*/
}
int main() {
bar< std::ptr_fun<int, int>(foo) > (1);
bar< boost::ptr_fun<int, int>(foo) > (1);
return 0;
}
在两ptr_fun行中,我都得到了error C2974: 'bar' : invalid template argument for 'T', type expected
.据我所知,prt_fun
创建一个类型,但std::ptr_fun<int, int>(foo)
创建一个对象。有没有办法尽可能多地使用函数指针 usinf 创建"初始化"的类型?
可能可以通过手动编码函子来解决这个问题,但我相信有ptr_fun方法。
ptr_fun
返回类型为 pointer_to_unary_function 的对象。您已将模板声明为采用类型参数,因此向其传递对象显然不起作用。
你可以让它像这样工作(注意你不需要指定模板参数,它可以由编译器推导出):
#include <iostream>
#include <functional>
int foo(int i)
{
return i;
}
template<typename TResult, typename TArg>
int bar(std::pointer_to_unary_function<TArg, TResult> p, TArg arg)
{
return p(arg);
}
int main()
{
std::cout << bar(std::ptr_fun<int, int>(foo), 42);
}
但是你真的不需要ptr_fun
.你可以简单地这样做:
#include <iostream>
#include <functional>
int foo(int i)
{
return i;
}
template<typename TFunc, typename TArg>
int bar(TFunc f, TArg arg)
{
return f(arg);
}
int main()
{
std::cout << bar(foo, 42);
}
或者,要使其像您设置的那样工作:
int foo(int i) { return i; }
template<typename T>
int bar(T t)
{
t(42);
}
int main() {
std::cout << bar( std::ptr_fun<int, int>(foo) );
}
很多问题,以防万一你真的不清楚你想完成什么。
相关文章:
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 如何在C++中创建类型列表的 n 路笛卡尔积?
- 使用 C++17,如何创建类型到值的编译时图?
- C++ 中的对象创建类型有什么区别?
- 在 C++ 中创建类型向量
- 创建类型列表并访问每种类型的静态成员?
- 无法创建类型为无序链接列表的对象
- 如何为指针创建类型定义
- 在没有宏的情况下在 C++98 中创建类型列表时遇到问题
- 使用特定成员变量值创建类型的类型
- <T> 从类型对象创建类型<T1>对象的构造函数
- 创建类型结构的指针阵列
- C++当类型T需要构造函数时,是否可以创建类型T的std::列表
- 在C++中创建类型定义
- 是否可以在 c++ 中创建类型的向量
- 创建类型为 'this'/当前对象的指针
- 如果模板化"ResourceCache"需要不同的创建参数/方法,它们如何加载/创建 T 类型的资源?
- ptr_fun - 无法创建类型?
- 如何从继承的自定义类 c++ 创建类型
- DLL 创建类型