2016-06-08 33 views
3

假設我建立與模板參數類模板:模板的模板參數的部分實例

template<template<typename> class A> class B; 

現在我想打一個實例,例如用於A採取INT(如參數,像template<class T> void f(int))是功能。有沒有辦法做到這一點?

+1

只是爲了澄清,你問如果一個*函數模板*可以是一個模板*模板參數*? – StoryTeller

回答

1

根據其他答案,模板模板參數不能用於函數模板。然而,你可以通過將你的函數包裝在一個模板仿函數中來模擬所需的功能。最簡單的將是一個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; 
} 
0

你不能將模板函數傳遞給其他模板。

您可以創建模板對象是行爲喜歡模板的功能,如:

struct my_wrapper { 
    template<class T> 
    static void invoke(int) {}; 
}; 

您可以傳遞一個類型,並期望它有一個名爲invoke,需要一個類型的靜態模板函數。