gpt4 book ai didi

c++ - 如何为静态模板方法起别名?

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

我有以下类(class):

struct A
{
template<typename T1, typename T2>
static double constexpr getPercentage(const T1 t1, const T2 t2)
{
return 100.0 * static_cast<double>(t1) / static_cast<double>(t2);
}
};

我为 B 设置了别名并使用 A::getPercentage,如下所示:

struct B
{
template<typename T1, typename T2>
using getPercentage = decltype(A::getPercentage<T1, T2>);

void f()
{
const double d = getPercentage(1.0, 2.0); //ERROR: Cannot refer to class template 'getPercentage' without a template argument list
}
};

这有什么问题吗?我怎样才能避免这个错误?

最佳答案

using is a type alias . getPercentage 不是类型,而是函数。您不能为函数起别名。

根据您的意图,转发功能会更合适。

template <typename T1, typename T2>
double constexpr getPercentage(T1&& t1, T2&& t2)
{
return A::getPercentage(std::forward<T1>(t1), std::forward<T2>(t2));
}

完整列表;

struct A
{
template<typename T1, typename T2>
static double constexpr getPercentage(const T1 t1, const T2 t2)
{
return 100.0 * static_cast<double>(t1) / static_cast<double>(t2);
}
};

struct B
{
template <typename T1, typename T2>
static constexpr double getPercentage(T1&& t1, T2&& t2)
{
return A::getPercentage(std::forward<T1>(t1), std::forward<T2>(t2));
}

void f()
{
const double d = getPercentage(1.0, 2.0);
}
};

关于c++ - 如何为静态模板方法起别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357694/

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