c++ - 在以函数为参数的模板函数中提取输入参数的类型

我有这个功能:

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/

相关文章:

django - 错误 : UPGRADE FAILED: another operation (i

nlp - 如何为 T5 模型使用 forward() 方法而不是 model.generate()

regex - 我如何在 vim 中翻译正则表达式以与 sed 一起工作?

generics - 如何使通用形式参数别名

r - 使用 data.table 在列表中查找完整集

Python - 用于从文本中获取特定行的正则表达式

python - 如何将有效值传入 cleartext_keyset_json 以创建 Tink k

python - Pandas pivot dataframe 并根据它们是否存在将新列设置为 Tr

python - For 循环得到错误说 (odd number - odd number)/2 i

c - C 版本是否向后兼容?