我目前正在与模板挣扎:我有一个模板类A
,执行基本的数学(为花车,双打,复数),看起来像这样删除多余的模板类型
template <typename T>
class A
{
public:
void foo(std::vector<std::complex<T>>& result);
};
现在我可以使用类似A<double>, A<float>
,但我也想使用它,如A<std::complex<float>>
和A<std::complex<double>>
。使用后者时,我想的foo
定义看起来像
void foo(std::vector<std::complex<float>>& result);
,而不是像
void foo(std::vector<std::complex<std::complex<float>>>& result);
有没有办法来为std::complex<T>
案件一个特定的模板,我在其中能访问“内部”类型?或者这是不可能的/不好的做法? 解决这个问题最优雅的方法是什么?
这两种方式是相同的,还是其中一种方式是这样做的首选方式? – FlashTek
@FlashTek - 他们真的不同;通过这种方式,您可以避免创建可以成为优势的专业化;但由于其他原因可能需要专业化;在这个玩具的例子中,我认为这是首选的特质方式;但对于你的真实(我认为更复杂)的必要性,专业化的方式可能更可取。只有你可以回答你的问题。 – max66
@FlashTek如果你只是想改变'foo'的签名,那么这个更简单。通过部分专业化,您可以自定义更多的内容,但是如您所问,您必须处理主要模板和部分专业化之间的重复代码。 – songyuanyao