gpt4 book ai didi

c++ - 具有成员变量和方法默认值的模板类特化

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

我有一个类模板:

template<typename T>
struct DefaultPattern {
using type = int;
static int CalculateValue(const T& input) {
return 0;
}
};

对于每种类型 T,我都会有一个特化。问题是,在特化类中,我需要定义在 DefaultPattern 中定义的所有成员变量和方法,即使它们可能与 中的值相同>默认模式。这是一个例子:

// A specialization for int.
template<>
struct DefaultPattern<int> {
// Same as DefaultPattern but I need to define it again.
using type = int;
static int CalculateValue(const int& input) {
return input + 2;
}
};

有没有办法让我在做特化时,只需要定义那些不同于 DefaultPattern 的成员?

最佳答案

Is there a way so that when I do the specialization, I only need to define those members that are different from DefaultPattern?

一种可能的解决方案是一种 self 继承:您的特化可以从通用模板继承。请注意,为了从通用模板继承,规范化使用了特定的实例化(例如,下面使用了 T = long)。

例如:

template <>
struct DefaultPattern<int> : public DefaultPattern<long>
{
static int CalculateValue (int const & input)
{ return input + 2; }
};

所以 DefaultPattern<int>继承type = int来自 DefaulPattern<long> (或 DefaultPattern<std::string> 或其他)并重新定义 CalculateValue()

下面是一个完整的工作示例:

#include <iostream>
#include <type_traits>

template <typename T>
struct DefaultPattern
{
using type = int;

static int CalculateValue (T const &)
{ return 0; }
};

template <>
struct DefaultPattern<int> : public DefaultPattern<long>
{
static int CalculateValue (int const & input)
{ return input + 2; }
};

int main ()
{
static_assert( std::is_same<DefaultPattern<int>::type, int>{}, "!" );

std::cout << DefaultPattern<long>::CalculateValue(1L) << std::endl;
std::cout << DefaultPattern<int>::CalculateValue(1) << std::endl;
}

关于c++ - 具有成员变量和方法默认值的模板类特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50065704/

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