我知道"使用"关键字可以用作模板别名和类型别名,但我没有看到有人提到过" typedef typename"可以用"替换为"使用"。那可能吗?
答案 0 :(得分:1)
以下表格的声明
typedef typename something<T>::type alias;
可以替换为
using alias = typename something<T>::type;
typename
仍然是必要的,但它确实看起来更整洁,并且由于我们正在定义一个别名,因此在行的中间放置=
是美学上令人愉悦的。使用的主要卖点是它可以模板化。
template <typename T>
using alias = typename something<T>::type;
单独使用typedef
您无法做到这一点。 C ++ 98等价物就是这种稍微怪异的语法。
template <typename T>
struct Alias {
typedef typename something<T>::type type;
};
// Then refer to it using typename Alias<T>::type.
// Compare to the C++11 alias<T>, which is much simpler.
using
超过typedef
的另一个主要卖点是,在定义函数别名时看起来更清晰。比较
// C++98 syntax
typedef int(*alias_name)(int, int);
// C++11 syntax
using alias_name = int(*)(int, int);
答案 1 :(得分:0)
using
可以替换类型声明。语法是:
使用标识符attr(可选)= type-id; (1)
模板&lt; template-parameter-list&gt; 使用标识符attr(可选)= type-id; (2)
type-id - 抽象声明符或任何其他有效的type-id(可能引入新类型,如type-id中所述)。 type-id不能直接或间接地将引用到标识符。
所以,这不能被单using
取代,你需要两个:
typedef struct MyS
{
MyS *p;
} MyStruct, *PMyStruct;