小编Áti*_*ves的帖子

可变参数模板数组引用参数的语法是什么?

我不知道我有什么是编译器错误,或者我只是不知道我正在尝试做什么的语法.想象一个需要2个数组引用的函数:

void takeArrays(const char (&str1)[4], const char (&str2)[4]) {
}
Run Code Online (Sandbox Code Playgroud)

调用时编译正常:

takeArrays("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做?因为传递const char*丢失了字符串文字的大小信息,这对我正在做的事情很重要.

但是,我真正想要做的是传递一个可变数量的数组引用.事情变得有点丑陋(变得更糟).我天真地试过这个:

template<typename... Args>
void takeArrays(const char (&Args... strs)[4]) {
}
Run Code Online (Sandbox Code Playgroud)

和GOT "error: variable or field ‘takeArrays’ declared void""error: expected primary-expression before ‘const’"(GCC 4.6).所以我尝试了这个:

template<typename... Args>
void takeArrays(const char (&(Args... strs))[4]) {
}
Run Code Online (Sandbox Code Playgroud)

并得到了"no matching function for call to ‘takeArrays(const char [4], const char [4])’""candidate is template<class ... Args> void takeArrays(const char (& (*)(Args ...))[4])".这是不可读的,但似乎接近我想要的.我尝试了很多变化,似乎无法编译.

假设有一个正确的方法来编写上述内容,我真正想做的是调用:

takeArrays("foo", …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11

7
推荐指数
1
解决办法
1477
查看次数

在D中,如何在所有整个元组上指定可变参数模板约束?

我正在写一个函数的2个重载,它们都带有可变参数模板编译时参数.应该将符号作为模板,其他字符串.我想将模板实例化约束到这两种情况.我想出的最好的是:

bool func(SYMBOLS...)() if(!is(typeof(SYMBOLS[0]) == string)) {
}
Run Code Online (Sandbox Code Playgroud)

bool func(STRINGS...)() if(is(typeof(STRINGS[0]) == string)) {
}
Run Code Online (Sandbox Code Playgroud)

显然这只会检查第一个模板参数,虽然它给出了我到目前为止编写的代码,但我希望我能说"仅适用于所有字符串"和"仅适用于所有字符串".有办法吗?

d variadic-templates

4
推荐指数
2
解决办法
189
查看次数

使用三元运算符从函数返回的统一初始化

我不知道这是编译器错误(Arch Linux 上的 gcc 4.8)还是标准的问题,但下面的代码无法编译。为什么允许 getFoo1 而不允许 getFoo2?

struct Foo {
    int _i;
    Foo(int i):_i(i) { }
};

Foo getFoo1(int i) {
    if(i == 3) {
        return { i + 2 };
    } else {
        return { i };
    }
}

Foo getFoo2(int i) {
    return i == 3 ? { i + 2 } : { i };
}

int main() {
    auto foo1 = getFoo1(3); //fine
    auto foo2 = getFoo2(3); //oops
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ ternary-operator uniform-initialization c++11

2
推荐指数
1
解决办法
368
查看次数