【发布时间】:2022-11-01 20:30:12
【问题描述】:
我有一些以输出类型为模板的函数。然后,此函数接受一个输入参数,该参数又以输出类型为模板。我不想指定输出类型两次,因为这只会使 api 混乱。在我的世界里,我已经告诉编译器它需要知道的一切来正确推断这一点,但我无法让它工作。建议?
template<typename T>
struct TestStruct {};
template<typename T, template<typename> class U>
T testFunc(U<T> arg)
{
return T{0};
}
int main()
{
testFunc<double>(TestStruct<double>{}); // Compiles
testFunc<double>(TestStruct{}); // Does not compile
}
【问题讨论】:
-
testFunc(TestStruct<double>{});有什么问题?第二行的问题是该函数采用U<T>,而您只提供U,它本身不是一个类型。
标签: c++ template-meta-programming