相关疑难解决方法(0)

我必须在何处以及为何要使用"模板"和"typename"关键字?

在模板,在那里,为什么我必须把typenametemplate上依赖的名字呢?究竟什么是依赖名称?我有以下代码:

template <typename T, typename Tail> // Tail will be a UnionNode too.
struct UnionNode : public Tail {
    // ...
    template<typename U> struct inUnion {
        // Q: where to add typename/template here?
        typedef Tail::inUnion<U> dummy; 
    };
    template< > struct inUnion<T> {
    };
};
template <typename T> // For the last node Tn.
struct UnionNode<T, void> {
    // ...
    template<typename U> struct inUnion {
        char fail[ -2 + (sizeof(U)%2) ]; // Cannot be instantiated for any …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++-faq dependent-name typename

1061
推荐指数
8
解决办法
15万
查看次数

为什么"A <0> = 0"中的template-id由于大于或等于运算符"> ="而无法在没有空格的情况下进行编译?

template <int>
using A = int;

void f(A<0>=0);   // Attempting to declare a function f taking int,
                  // with the default argument 0

// Works as expected:
// void f(A<0> = 0);
Run Code Online (Sandbox Code Playgroud)

这既不适用于GCC 4.9.2也不适用于Clang 3.5 - 更不用说ICC或VC++了.显然,该>=位被解析为大于或等于运算符.但是,对于[temp.names]/3,这似乎是不正确的:

名称查找(3.4)后发现名称是模板名称或者operator-function-idliteral-operator-id引用一组重载函数,其中任何成员都是函数模板,如果遵循此函数通过a <,<始终将其视为template-argument-list的分隔符,而不是less-than运算符. 在解析模板参数列表时,第一个非嵌套 >138被视为结束分隔符而不是大于运算符.[..] [ 例如:

template<int i> class X { /* ...*/ };

X< 1>2 > x1; // syntax error
X<(1>2)> x2; // …
Run Code Online (Sandbox Code Playgroud)

c++ templates language-lawyer c++11

27
推荐指数
1
解决办法
684
查看次数

为什么Rust有时会在generics中放置::之前的参数?

在Rust中声明vector类型的变量或哈希映射时,我们会:

let v: Vec<int>
let m: HashMap<int, int>
Run Code Online (Sandbox Code Playgroud)

要实例化,我们需要调用new().但是,我们这样做:

Vec::<int>::new()
   ^^
HashMap::<int, int>::new()
       ^^
Run Code Online (Sandbox Code Playgroud)

注意突然出现的::.来自C++,这些都很奇怪.为什么会这样?是否具有引导::使IDENTIFIER :: < IDENTFIER …容易解析比IDENTIFIER < IDENTIFIER,这可能会被解释为一个小于操作?(因此,这只是让语言更容易解析的一个问题吗?但是如果是这样的话,为什么不在类型规范中这样做,以便让两个镜像相互映射?)

(正如Shepmaster所说,经常Vec::new()就足够了;通常可以推断出这种类型.)

grammar language-design rust

8
推荐指数
1
解决办法
193
查看次数