假設我建立與模板參數類模板:模板的模板參數的部分實例
template<template<typename> class A> class B;
現在我想打一個實例,例如用於A
採取INT(如參數,像template<class T> void f(int)
)是功能。有沒有辦法做到這一點?
假設我建立與模板參數類模板:模板的模板參數的部分實例
template<template<typename> class A> class B;
現在我想打一個實例,例如用於A
採取INT(如參數,像template<class T> void f(int)
)是功能。有沒有辦法做到這一點?
第Template template arguments不能與功能模板一起使用。
模板模板參數的模板參數必須是 用於命名類模板或模板別名的id-expression。
根據其他答案,模板模板參數不能用於函數模板。然而,你可以通過將你的函數包裝在一個模板仿函數中來模擬所需的功能。最簡單的將是一個std::function
。這是一個愚蠢的例子來證明這一點:
#include <iostream>
#include <functional>
template<template <class A> class T>
class B
{
public:
template<typename Arg>
void invoke(T<Arg> target, Arg arg)
{
target(arg);
}
};
template<typename T>
void f(T arg)
{
std::cout << arg << std::endl;
}
template<typename T>
using fWrapper = std::function<void(T)>;
int main()
{
B<fWrapper> b;
b.invoke<int>(fWrapper<int>(f<int>), 1);
return 0;
}
你不能將模板函數傳遞給其他模板。
您可以創建模板對象是行爲喜歡模板的功能,如:
struct my_wrapper {
template<class T>
static void invoke(int) {};
};
您可以傳遞一個類型,並期望它有一個名爲invoke
,需要一個類型的靜態模板函數。
只是爲了澄清,你問如果一個*函數模板*可以是一個模板*模板參數*? – StoryTeller