如何调用模板类的静态模板函数?

时间:2018-08-07 18:48:18

标签: c++ c++11

这是问题的重复:

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>

template <typename T>
struct a_class {
    // build an a_class instance
    template <typename U>
    static a_class a_builder() {
        return a_class(sizeof(U));
    }

    // print out size
    void print() {
        printf("%zd\n", size_);
    }

private:
    a_class(ssize_t size) : size_(size) {}
    ssize_t size_;
};


template <typename T>
void some_func() {
    a_class<T> a = a_class<T>::a_builder<uint32_t>();
    a.print();
}


int main() {
    some_func();
}

在g ++ 7.3.0下,出现此错误:

 ╰─▸ g++ test.cc -o test
test.cc: In function ‘void some_func()’:
test.cc:26:50: error: expected primary-expression before ‘>’ token
     a_class<T> a = a_class<T>::a_builder<uint32_t>();
                                                  ^
test.cc:26:52: error: expected primary-expression before ‘)’ token
     a_class<T> a = a_class<T>::a_builder<uint32_t>();
                                                    ^
test.cc: In function ‘int main()’:
test.cc:32:15: error: no matching function for call to ‘some_func()’
     some_func();
               ^
test.cc:25:6: note: candidate: template<class T> void some_func()
 void some_func() {
      ^~~~~~~~~
test.cc:25:6: note:   template argument deduction/substitution failed:
test.cc:32:15: note:   couldn't deduce template parameter ‘T’
     some_func();
               ^

有趣的是,如果T是具体类型:

void some_func() {
    a_class<int> a = a_class<int>::a_builder<uint32_t>();
    a.print();
}

一切都很好。既然是模板上下文,是否有特殊的语法?

0 个答案:

没有答案