2015-07-19 93 views
2

不確定這次是否使用模板編程走遠。我嘗試傳遞一個模板模板參數。這個問題來自一個真正的問題,但我現在要以不同的方式解決這個問題。所以,問題是或多或少的「學院派」「using」for「<template <class> class T>」

首先,我嘗試將被用來作爲模板參數的結構「存儲」 F_

template <class M_, template <class> class F_> 
struct Conf{ 
    using F = F_; // Problem 1: F_ is not a type! 
    using M = M_; 
}; 

F然後從結構讀取和用於實例func

template <class CONF> // CONF is a Conf<x, y> 
void call(){ 
    using F = typename CONF::F; // Problem 2: F_ is still not a type! 
    func<F>(); 
} 

而且FUNC是:

template <template <class> F> 
void func(){ 
    F<MyType>::call(); 
} 

問題是:我不能使用「存儲」F。我能做些什麼來在結構中傳遞F

+0

'F_'是一個模板類型。所以你需要寫'使用F = F_ '或其他東西。 – CoffeeandCode

回答

2

你應該模板您using這樣的:

template <class M_, template <class> class F_> 
struct Conf{ 
    template <class T> 
    using F = F_<T>; 
    using M = M_; 
}; 
+0

請注意,「F」和「F_」被認爲是不同的(例如專業化),而「F 」和「F_ 」是相同的。 – Jarod42

+0

@ Jarod42你確定嗎?我隱約記得,如果這是真的或者在什麼情況下,標準缺陷就會被提出來。 – Yakk

+0

@Yakk:不再當叮噹聲和gcc不同意:-([Demo](http://coliru.stacked-crooked.com/a/1f2e20c8f6845995) – Jarod42