gpt4 book ai didi

C++ - 如何在函数声明中使用模板 typedef 解决方法?

转载 作者:可可西里 更新时间:2023-11-01 18:36:10 24 4
gpt4 key购买 nike

我想在各种地方使用模板化的 typedef,尤其是在声明自身模板化函数时。这是我目前的尝试

template<typename T>
struct type{ typedef std::vector<T> sometype; }

template<typename TT>
void someFunction( type<TT>::sometype& myArg );

(注意 std::vector<T> 只是一个例子)。这不起作用并给出编译器错误“'void someFunction'的模板声明”。我已经知道我需要放一个 typenametype<TT> 前,即

template<typename TT>
void someFunction( typename type<TT>::sometype& myArg );

有效。但至少可以说,这个解决方案有点笨重。有其他选择吗?

最佳答案

不仅体积大,而且防止模板参数推导:

std::vector<int> a;
someFunction(a); // error, cannot deduce 'TT'
someFunction<int>(a);

替代方案(在 C++11 中)是模板别名:

template<typename T>
using sometype = std::vector<T>;

template<typename T>
void someFunction(sometype<T> &myArg );

std::vector<int> a;
someFunction(a);

您也可以使用宏,但宏永远不是正确答案。

#define sometype(T) std::vector<T>

template<typename T>
void someFunction( sometype(T) &myArg);

此外,我认为您对某种类型的定义在 C++11 之前是无效的。它不应该有那个类型名:

template<typename T>
struct type{ typedef std::vector<T> sometype; };

我认为 C++11 更改了规则以允许它,但一些 C++03 编译器未能正确诊断该问题。

关于C++ - 如何在函数声明中使用模板 typedef 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824272/

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