gpt4 book ai didi

c++ - 是否可以在派生类中有选择地定义类型

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:10 25 4
gpt4 key购买 nike

我有一个看起来像这样的类模板:

template <Base>
struct foo : Base
{
typedef int some_type;
};

我有一个看起来像这样的基地:

struct some_base
{
typedef float some_type;
};

现在foo<some_base>::some_type将是 int作为派生 foo将隐藏 Base::some_type .我想做的是,如果 Base::some_type已定义,使用其他,定义 some_type在本地 foo作为'int - 所以问题是,这可能吗?

我可以颠倒关系并避免让自己头疼,但是在实际应用中这不是很合乎逻辑......

最佳答案

只要一点点模板元编程,一切皆有可能:)

首先编写一个元函数来确定一个类型是否有一个名为“some_type”的嵌套类型。像这样:

template <typename T>
struct has_some_type
{
typedef char no; // type with sizeof == 1
typedef struct { char x[2]; } yes; // type with sizeof == 2

template <typename X, typename Y = typename X::some_type>
struct foo {};

template <typename X>
static yes test(foo<X>*);

template <typename X>
static no test(...);

static const bool value = (sizeof(test<T>(0)) == sizeof(yes));
};

现在你可以在派生类中做这样的事情:

template <typename T, bool has_some_type>
struct get_some_type;

template <typename T>
struct get_some_type<T, true>
{
typedef typename T::some_type type;
};

template <typename T>
struct get_some_type<T, false>
{
typedef int type; // the default type
};

template <typename base>
class derived : base
{
typedef typename get_some_type<base, has_some_type<base>::value>::type some_type;

...
};

关于c++ - 是否可以在派生类中有选择地定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961950/

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