1
假設我有一個類模板如何在函數模板中聲明模板專門化?
template<int I, int J> class bar { /* ... */ };
,並希望與結合的第二個模板參數(固定)使用下面的模板的模板
template<template<int> class C>
struct foo { void func(some_type arg); };
與C
等於bar
。實現這一目標的方法之一是
template<int J, template<int, int> class B>
struct use_foo_helper {
template<int I> using BJ = B<I,J>;
static void func(some_type arg) { foo<BJ>::func(arg); }
};
template<int J>
void foo_bar(some_type arg) { use_foo_helper<J,bar>::func(arg); }
但是,創建一個輔助類(use_foo_helper
)只是爲了這個目的是相當不方便。我寧願想只要定義函數模板foo_bar
,但沒有成功
template<int J>
void foo_bar(some_type arg)
{
// template<int I> using barJ = bar<I,J>; // this appears to be illegal
// for<barJ>::func(arg);
foo<???>::func(arg); // what shall I put in place of ???
};
Q有沒有辦法避免的輔助類? Q有沒有更好的設計模式達到相同?
您仍然使用輔助助手類'foo_bar'和'barJ'。那麼你是說,那些無法避免?如果是這樣,你能證明這一點嗎? – Walter
@Walter對不起,我不注意地閱讀你的問題。是的,我認爲你不能避免使用助手類。不,我不能證明這一點。但我知道你甚至不能將模板聲明爲本地類的成員(見14.5.2/2),所以... – Constructor