Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有模板参数的模板类专门化_C++_Templates_Template Meta Programming - Fatal编程技术网

C++ 带有模板参数的模板类专门化

C++ 带有模板参数的模板类专门化,c++,templates,template-meta-programming,C++,Templates,Template Meta Programming,及 模板 结构条{ 使用toto=T }; 这可能是有道理的,但我无法正确理解你的ideone代码只是有一大堆印刷错误: template <template<typename , typename ...> class F, typename T, typename ...L> struct bar<F<T,L...>>{ using toto = T }; 结构栏{ //应该是 结构条{ //缺少括号 int main{ //缺少分

模板
结构条{
使用toto=T
};

这可能是有道理的,但我无法正确理解你的ideone代码只是有一大堆印刷错误:

template <template<typename , typename ...> class F, typename T, typename ...L>
struct bar<F<T,L...>>{
    using toto = T
};
结构栏{
//应该是
结构条{
//缺少括号
int main{
//缺少分号
使用toto=T
酒吧a;
//应该是
酒吧a;

从语法上讲,您在示例中忘记了很多东西

模板
结构foo{};
模板
结构条{
使用toto=T;//缺少分号
};
模板
结构条{//包扩展错误
使用toto=T;
};
缺少int main(){/()
bara;//将参数传递给foo,因为
//我只是想这么做
}

这里有一些语法问题

  • bar
    是接受一个类型参数的模板。因此
    bar
    的任何部分或显式专门化也必须接受一个类型参数

    template <typename T, typename... L>
    struct foo{};
    
    template <typename T>
    struct bar {
        using toto = T; // Semicolon missing
    };
    
    template <template<typename, typename...> class F, typename T, typename... L>
    struct bar<F<T,L...>> { // Wrong pack expansion
        using toto = T;
    };
    
    int main() { // () missing
    
        bar< foo<int,char,char> > a; // Pass the parameters to foo since you're
                                     // partially specializing bar to just do that
    }
    
  • 您缺少一个分号:

        template <template<typename , typename ...> class F,
            typename T, typename... L>
        struct bar<F<T, L...>> {
    
  • 您的
    main
    声明缺少括号:

    using toto = T;
                 ^^
    
    intmain(){
    酒吧a;
    }
    

  • 最后一个看起来应该是这样的,错误是什么?问题是,bar只需要一个模板参数,但是为了调用最后一个模板,我至少需要3个,因为我一直在调解它,但是它仍然不是Wokimi尝试过的,但是现在我看到了这个问题,它是<>代码> <代码>这是C++的一个常见的解析怪癖。“ILL应该发出正确的选项警告,C++ 11添加了一个解析规则,允许使用<代码> >代码>。谢谢,我已经尝试过了,但是我在代码< >代码> <代码>之前,把代码< >代码>,这就是为什么它不工作它应该工作,不管从C++ 11开始的新C++版本的空间。o日期编译器
    template <typename T, typename... L>
    struct foo{};
    
    template <typename T>
    struct bar {
        using toto = T; // Semicolon missing
    };
    
    template <template<typename, typename...> class F, typename T, typename... L>
    struct bar<F<T,L...>> { // Wrong pack expansion
        using toto = T;
    };
    
    int main() { // () missing
    
        bar< foo<int,char,char> > a; // Pass the parameters to foo since you're
                                     // partially specializing bar to just do that
    }
    
    template <template<typename T, typename ...L> class F>
    struct bar<F> {
    
        template <template<typename , typename ...> class F,
            typename T, typename... L>
        struct bar<F<T, L...>> {
    
    using toto = T;
                 ^^
    
    int main() {
        bar<foo<int,char,char>> a;
    }