1
我基于编译时间常数得到了一些模板,就像这样:转化这些模板别名声明
const int SIG0 = 0;
template<int Sig>
struct SignalPrototype;
template<>
struct SignalPrototype<SIG0> {
typedef std::function< void() > type;
};
当我试图把它转变成C++ 11(我相信)别名声明,我无法得到它在任何形状或形式(张贴只是其中之一)工作:
const int SIG0 = 0;
template<int Sig>
using SignalPrototype = std::function< void() >;
template<>
using SignalPrototype<SIG0> = std::function< void() >;
与错误:expected unqualified-id before ‘using’
我猜它期待在模板参数的东西,但我可以” t把SIG0
,因为它不是一个类型。我使用的C++标准高达C++ 17,所以任何新的我不知道的东西,也是赞赏。
此外,我不喜欢标题中的'这些',但我不知道它们的具体名称是什么。
我确实能做到这一点,我会看它是否适合我特定的代码 - 或者甚至与可读性帮助(这主要是我之后) – areuz
@areuz C++ 14中的'std'命名空间包含了很多别名,比如我建议的'SignalPrototype_t',这些在C++ 11中都没有。所以人们觉得它们很有用。我也自己使用它们,因为它们可以让你始终不用输入'typename'和':: type'。以下是来自'type_traits'标头的一些示例:http://en.cppreference.com/w/cpp/header/type_traits向下滚动“概要”部分。 – SU3