我有这个功能:
template<typename T, int (*F)(T&)>
void DoStuff(T& s)
{
auto an = make_any<T>(s);
cout << _GetDataFromAny<MyStruct, F>(an);
}
需要这样调用:
DoStuff<MyStruct, Fun>(s);
这很好用,但我不喜欢必须指定第一种类型,因为它是第二个参数签名的一部分。我希望能够推断出它,这样我就可以调用:
DoStuff<Fun>(s);
但是,我不知道如何在模板中指定需要从函数F的签名中推导出类型T。
这可能吗?
最佳答案
您可以编写一个助手来推断返回 int
的函数指针的参数类型:
template<typename T>
T arg_type(int(*)(T&));
然后稍微重写你的函数模板,将函数指针作为非类型模板参数,并从中找出参数类型
template<auto F, typename T = decltype(arg_type(F))>
void DoStuff(T& s) {
// ...
}
https://stackoverflow.com/questions/67308570/