以下内容在C ++中是可行的:
#include <iostream>
using namespace std;
template <typename T>
class FooClass
{
public:
static void bar(T t, int i)
{
cout << t + i;
}
};
template<template<typename> typename target, typename ...Args>
void intermediateForClass(Args ...args)
{
target<int>::bar(1, args...);
}
int main(int, char**)
{
intermediateForClass<FooClass>(2);
return 0;
}
但实际上在这种情况下,我只有一个带静态方法的类,我只需要一个函数。但我无法设法对功能做同样的事情。 我认为这段代码可行,但它没有:
#include <iostream>
using namespace std;
template<typename T>
void foo(T t, int i)
{
cout << t + i;
}
template<template<typename> typename target, typename ...Args>
void intermediateForFunctions(Args ... args)
{
target<int>(1, args...);
}
int main(int, char**)
{
intermediateForFunctions<foo>(2);
return 0;
}
似乎实际上有一个类模板的有效类型,但不适用于函数模板。或者我做错了什么? 反正有没有让第二个版本工作?如果没有,为什么呢?