有没有办法实现这种行为?
template < typename... Args >
class MyClass
{
public:
typedef std::tuple < Args... > my_tuple;
template < int n >
static int bar () { return -5; };
};
我需要的是这个 - 我有变量模板MyClass
包含方法foo
,它由另一种类型(在我的情况下只是整数)模板化。这甚至可能吗?我找到了simmilar解决方案,但仅适用于非变量类。
但是由于bar
而无法编译。
编辑: 我在gcc 4.7.2上编译
应该运行像MyClass<int, int>::bar<4>()
有人可以帮我吗?
提前致谢
EDIT2:完整代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <queue>
#include <set>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <map>
template < typename... Args >
class MyClass
{
public:
typedef std::tuple < Args... > my_tuple;
template < int n >
static int bar () { return -5; };
};
template < class A, int N >
static void foo()
{
A::bar < N > ();
}
int main() {
foo< MyClass<int, int>, 4> ();
return 0;
}
EDIT3:错误
$g++ -Wall -std=c++11 -g -o test.out test.cpp
test.cpp: In function ‘void foo()’:
test.cpp:28:16: error: expected primary-expression before ‘)’ token
test.cpp: In instantiation of ‘void foo() [with A = MyClass<int, int>; int N = 4]’:
test.cpp:34:30: required from here
test.cpp:28:2: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
make: *** [test] Error 1
答案 0 :(得分:2)