指向模板函数的函数指针
Function pointer to templated function
我有两个模板化函数签名。这里 T 可以是 int 或 double。
template <typename T>
Box<T> f2p(Box<T> const& box, Point<T> const& pt, Orientation o)
{
...
}
template <typename T>
Box<T> p2f(Box<T> const& box, Point<T> const& pt, Orientation o)
{
...
}
现在根据方向,我想调用 f2p 或 p2f。我想创建一个指向 f2p 或 p2f 的函数指针。如何创建指向模板函数的函数指针?我想实现如下效果:
typename <template T>
Box<T> do_transformation(Box<T> const& box, ..., int dir = 0)
{
function pointer p = dir ? pointer to f2p : pointer to p2f
return p<T>(box);
}
我尝试了类似的操作,但出现编译错误:
Box<T> (*p)(Box<T>, Point<T>, Orientation) = dir ? fc2p<T> : p2fc<T>
除非你需要pointer
做其他事情,你可以使用:
typename <template T>
Box<T> do_transformation(Box<T> const& box, ..., int dir = 0)
{
return (dir ? f2p(box, ...) : p2f(box, ...));
}
您不能拥有指向函数模板的指针,但可以拥有指向函数模板的特定实例化的指针。
Box<T>(*p)(Box<T> const&, Point<T> const&, Orientation);
p = dir ? &f2p<T> : &p2f<T>;
I try something like this but I get compile errors:
Box<T> (*p)(Box<T>, Point<T>, Orientation) = dir ? f2p<T> : p2f<T>
仔细查看您的函数采用的参数:
template <typename T>
Box<T> f2p(Box<T> const& box, Point<T> const& pt, Orientation o)
^^^^^^^^ ^^^^^^^^
所有参数必须完全匹配。在这种情况下:
Box<T> (*p)(Box<T> const&, Point<T> const&, Orientation) = dir ? f2p<T> : p2f<T>;
或者,简单地说:
auto p = dir ? f2p<T> : p2f<T>;
我有两个模板化函数签名。这里 T 可以是 int 或 double。
template <typename T>
Box<T> f2p(Box<T> const& box, Point<T> const& pt, Orientation o)
{
...
}
template <typename T>
Box<T> p2f(Box<T> const& box, Point<T> const& pt, Orientation o)
{
...
}
现在根据方向,我想调用 f2p 或 p2f。我想创建一个指向 f2p 或 p2f 的函数指针。如何创建指向模板函数的函数指针?我想实现如下效果:
typename <template T>
Box<T> do_transformation(Box<T> const& box, ..., int dir = 0)
{
function pointer p = dir ? pointer to f2p : pointer to p2f
return p<T>(box);
}
我尝试了类似的操作,但出现编译错误:
Box<T> (*p)(Box<T>, Point<T>, Orientation) = dir ? fc2p<T> : p2fc<T>
除非你需要pointer
做其他事情,你可以使用:
typename <template T>
Box<T> do_transformation(Box<T> const& box, ..., int dir = 0)
{
return (dir ? f2p(box, ...) : p2f(box, ...));
}
您不能拥有指向函数模板的指针,但可以拥有指向函数模板的特定实例化的指针。
Box<T>(*p)(Box<T> const&, Point<T> const&, Orientation);
p = dir ? &f2p<T> : &p2f<T>;
I try something like this but I get compile errors:
Box<T> (*p)(Box<T>, Point<T>, Orientation) = dir ? f2p<T> : p2f<T>
仔细查看您的函数采用的参数:
template <typename T>
Box<T> f2p(Box<T> const& box, Point<T> const& pt, Orientation o)
^^^^^^^^ ^^^^^^^^
所有参数必须完全匹配。在这种情况下:
Box<T> (*p)(Box<T> const&, Point<T> const&, Orientation) = dir ? f2p<T> : p2f<T>;
或者,简单地说:
auto p = dir ? f2p<T> : p2f<T>;