gpt4 book ai didi

c++ - 需要在 VC6 和 VC7 中判断函数是否有 void 返回类型的方法

转载 作者:行者123 更新时间:2023-11-30 01:01:26 26 4
gpt4 key购买 nike

下面的 C++ 代码可以为 GNU g++、LLVM 和除 Microsoft VC6 和 VC7 之外的所有其他 C++ 编译器正确编译和运行:

template<typename A, typename B> int HasVoidReturnType(A(*)(B)) { return 0; }
template<typename B> int HasVoidReturnType(void(*)(B)) { return 1; }
void f(double) {}
int foo() { return HasVoidReturnType(f); }

对于VC6和VC7,编译失败报错:

f.cpp(4) : error C2667: 'HasVoidReturnType' : none of 2 overloads have a best conversion
f.cpp(2): could be 'int HasVoidReturnType(void (__cdecl *)(B))'
f.cpp(1): or 'int HasVoidReturnType(A (__cdecl *)(B))'
while trying to match the argument list '(overloaded-function)'
f.cpp(4) : error C2668: 'HasVoidReturnType' : ambiguous call to overloaded function
f.cpp(2): could be 'int HasVoidReturnType(void (__cdecl *)(B))'
f.cpp(1): or 'int HasVoidReturnType(A (__cdecl *)(B))'
while trying to match the argument list '(overloaded-function)'

与其争论编译器的优点,不如使用 VC6 和 VC7 从模板函数确定函数是否具有 void 返回类型?

最佳答案

就 VC++ 6 而言,你被搞砸了,因为它不支持部分模板特化,而这正是你解决此问题所需要的。

关于c++ - 需要在 VC6 和 VC7 中判断函数是否有 void 返回类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524369/

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