我有以下代码:
template <typename T, void (*f)(T*)>
class callfn
{
public:
void operator()(T* obj) const
{
f(obj);
}
};
void call(int* foo) {}
void test()
{
callfn<int, call> fun;
fun(1);
}
这往往工作正常。callfn
但是该类型在各处使用,如果我可以这样称呼它,我会更喜欢
callfn<call> fun;
相反,无需修改的类型,call
是否可以按照callfn
可以T
从的类型推断出类型的方式来安排一个或多个模板f
?
不,您不需要知道struct或class的args,这些函数在c ++中具有模板类型推导。
论文n3602似乎解决了这一问题,因此似乎您不是唯一一个感到烦人的人(我也是)。我不知道它是否会被包括在内,但该论文至少意味着其他人正在考虑它。n6301将能够消除非类型模板参数所具有的冗余类型名。
另一件事(也在c ++ 14中)是make_unique
下一个标准。自己编写代码也可能相对容易。
正如我在评论中指出的那样,目前尚不清楚您到底要达到什么目的,并且是否必须编写额外的类型实际上是一个障碍。
既然您在注释中明确指出,您需要使用它来删除a,因此unique_ptr
我不确定这是怎么回事。
std::unique_ptr<int,void(*)(int*)> ptr(int_ptr,deleter);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句