gpt4 book ai didi

c++ - 推导出具有默认模板参数的模板函数指针的模板参数

转载 作者:行者123 更新时间:2023-12-04 11:56:28 24 4
gpt4 key购买 nike

虽然这个问题似乎有点令人困惑。代码很简单:

template <typename T>
void tfunc(T&& getter)
{

}

template <typename T = void>
void voidfunc()
{}

int main() {
tfunc(&voidfunc); // error: could not deduce template argument for 'T'
tfunc(&voidfunc<int>); // ok
voidfunc(); // calling using default template parameter is ok.
}
clang 11 和 msvc Visual Studio 2019 16.7 都提示错误。
为什么我需要明确指定模板参数?
背景
  • 参数是一个虚拟参数只是为了延迟 voidfunc 的实例化到使用它的地方。类型并不重要。
  • &voidfunc由 clangAST 生成的一些代码使用,否则我需要调整生成器来编写 &voidfuc<>如果是模板。
  • __declspec(property(put=voidfunc))然而,这个 clang/msvc 扩展需要 voidfunc但不是 voidfunc<>

  • 我已经调整了生成器以输出 &voidfunc<>正如@Jarod42 所说,如果给定的函数是模板。它现在有效。

    最佳答案

    正如评论中所述,这种情况在标准中直到 C++20 才明确,它是 cleaned up为了更好地支持约束函数的新特性。新规范在以前的语言版本中是有意义的(忽略约束的可能性),因此希望实现最终会在任何地方支持这种用法。

    关于c++ - 推导出具有默认模板参数的模板函数指针的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69031751/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com