gpt4 book ai didi

c++ - 类定义之外的部分模板特化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:26 25 4
gpt4 key购买 nike

我可以在类声明中使用部分模板特化

template<class T1, class T2>
struct A
{
void foo() { cout << "general"; }
};

template<class T1>
struct A<T1, int>
{
void foo() { cout << "partial specialization"; }
};

但是当我试图在类声明之外做这件事时

template<class T1, class T2>
struct A
{
void foo();
};


template<class T1, class T2>
void A<T1, T2>::foo() { cout << "general"; }

template<class T1>
void A<T1, int>::foo() { cout << "partial specialization"; }

我收到以下错误:

invalid use of incomplete type «struct A < T1, int >»

当您想要重新定义所有成员时,使用第一种方法没有问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?

那么,是否可以在类定义之外使用部分模板特化?

最佳答案

It's not a problem to use the first approach when you want to redefine all members, but what if you want redefine only one method without code duplication for all others?

这是可以使用特征技术的地方。参见 http://www.boost.org/community/generic_programming.html#traits

一些用法:

template <class T1, class T2>
struct ATraits {
static void foo() {}
};

template <class T1>
struct ATraits<T1,int> {
static void foo() {}
};

template <class T1, class T2>
struct A {
void foo() { ATraits<T1,T2>::foo(); }
};

关于c++ - 类定义之外的部分模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com