相关疑难解决方法(0)

由于对模板化类型的通用(前向)引用而无法实例化函数模板

通用参考(即"前向参考",c++标准名称)和完善的转发c++11,c++14具有许多重要优势; 看到这里,在这里.

在上面引用的Scott Meyers的文章(链接)中,根据经验表明:

如果变量或参数声明为某个推导类型 T的类型为T &&,则该变量或参数是通用引用.

例1

实际上,使用clang ++我们看到以下代码片段将成功编译-std=c++14:

#include <utility>

template <typename T>
decltype(auto) f(T && t)
{
    return std::forward<T>(t);
}

int        x1 = 1;
int const  x2 = 1;
int&       x3 = x1;
int const& x4 = x2;

// all calls to `f` result in a successful
// binding of T&& to the required types
auto r1 = f …
Run Code Online (Sandbox Code Playgroud)

c++ templates perfect-forwarding c++11 c++14

11
推荐指数
1
解决办法
1053
查看次数

对模板模板参数的通用引用

是否可以通过通用引用传递模板模板参数值?例如,考虑处理STL序列的函数(非)的这个最小示例:

#include <iostream>
#include <vector>

template < template<typename,typename> class C, template<typename> class A, typename T >
void func(C<T, A<T>>&& c) {
    // usually I'd std::forward here, but let's just use cout...
    std::cout << c.size() << "\n";
}

int main (int argc, char const* argv[]) {
    func(std::vector<float>(2));
    std::vector<float> lv(3);
    func(lv);
}
Run Code Online (Sandbox Code Playgroud)

它不会编译,因为编译器不知道如何在第二次调用func时绑定l值("lv").当涉及C类型的演绎规则时,我有点迷失了.任何人都可以启发我吗?

编辑:虽然我猜这与问题无关:我使用g ++ 4.9和clang 3.5(两个repo HEAD)

c++ templates c++11

9
推荐指数
1
解决办法
468
查看次数

标签 统计

c++ ×2

c++11 ×2

templates ×2

c++14 ×1

perfect-forwarding ×1