gpt4 book ai didi

c++ - 如何防止用户指定函数模板参数,强制推导它?

转载 作者:行者123 更新时间:2023-12-02 09:44:24 26 4
gpt4 key购买 nike

假设我有一个模板函数:

template <typename A, typename B>
A fancy_cast(B)
{
return {};
}

预期用途类似于 fancy_cast<int>(1.f) .

但是没有什么可以阻止用户手动指定第二个模板参数:fancy_cast<int, int>(1.f) ,这会导致问题。

如何防止typename B不被指定并强制推断它?

我想出了这个:

// Using this wrapper prevents the code from being
// ill-formed NDR due to [temp.res]/8.3
template <auto V> inline constexpr auto constant_value = V;

template <
typename A,
typename ...Dummy,
typename B,
typename = std::enable_if_t<constant_value<sizeof...(Dummy)> == 0>
>
A fancy_cast(B)
{
return {};
}

它似乎有效,但极其很麻烦。有更好的办法吗?

最佳答案

fancy_cast 设为变量模板怎么样?

template <typename A>
struct fancy_cast_t {
template <typename B>
A operator()(B x) const { return x; }
};

template <typename A>
constexpr fancy_cast_t<A> fancy_cast {};

fancy_cast<int>(1.5); // works
fancy_cast<int, int>(1.5); // doesn't work
fancy_cast<int>.operator()<int>(1.5); // works, but no one would do this

关于c++ - 如何防止用户指定函数模板参数,强制推导它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770810/

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