C++似乎不能或不愿意为基本整数类型的模板别名推断模板参数。
下面是一个相对简单的例子:
#include <stdint.h>
template<typename T>
using IntPtr = intptr_t;
template<typename T>
T* getPtr(IntPtr<T> i)
{
return (T*) i;
}
int main()
{
IntPtr<char> char_star = 0xcafe'babe'dead'beef;
return *getPtr(char_star);
}
字符串
尝试编译上面的代码会出现以下错误:
$ clang -xc++ -std=c++20 why.cc
why.cc:17:13: error: no matching function for call to 'getPtr'
return *getPtr(char_star);
^~~~~~
why.cc:8:4: note: candidate template ignored: couldn't infer template argument 'T'
T* getPtr(IntPtr<T> i)
^
1 error generated.
型
我试过各种不同的C标准版本,包括c2b,但结果总是一样的。
1条答案
按热度按时间voase2hg1#
字符串
T
不能从intptr_t
推导出来,所以这是不可能的。IntPtr<char>
是intrptr_t
,所以你要求编译器从intrptr_t
推导出T
,这根本不可能做到。你可以这样写:
型