gpt4 book ai didi

c++ - 具有模板化功能的特化模板类

转载 作者:太空狗 更新时间:2023-10-29 22:59:21 25 4
gpt4 key购买 nike

我有一些带有模板化功能的辅助模板。我将它用于其他基于策略的模板化类,以将某些值转换或不转换为特定类型:

// use this when needed additional value cast
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u)
{
return static_cast<T>(u);
}
};

// use this specialization when no needed to cast value
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u)
{
return u;
}
};

现在我想将这些类拆分为声明和实现(.h 和.hh 文件)

所以我这样写声明:

template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u);
};


template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u);
};

现在我想写实现。这没关系:

template <typename T>
template <typename U>
T AdditionalValueStaticCaster<T>::cast(U u)
{
return static_cast<T>(u);
}

但这会导致错误 error: too many template-parameter-lists

template<>
template <typename U>
U AdditionalValueStaticCaster<void>::cast(U u)
{
return u;
}

如果我删除行 template<>一切编译正常,但我仍然有一个问题:这是正确的解决方案还是我遗漏了什么?

最佳答案

If I delete line template<> all compiles ok, but I still has question: is it right solution or I missed something?

没错,您只需要删除该行即可。 AdditionalValueStaticCaster<void>是具体类型,您只是提供该类型的成员函数模板的定义。因此:

template <typename U>
U AdditionalValueStaticCaster<void>::cast(U u)
{
return u;
}

与任何其他类类型的成员函数模板没有区别:

template <typename U>
U SomeClass::cast(U u)
{
return u;
}

关于c++ - 具有模板化功能的特化模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37191327/

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