gpt4 book ai didi

c++ - 使用SFINAE的C++ friend 模板

转载 作者:行者123 更新时间:2023-12-01 14:42:46 26 4
gpt4 key购买 nike

实际上,这是一个简单的问题。我有一个带有一个参数的模板类。
在另一个对象中,我将它作为它的 friend ,如下所示:

template< typename type_t >
class A
{
...
}

template< typename type_t >
class B
{
template< typename >
friend class A; // Works fine !

...
}

之后,我想添加一个条件来实例化A类(顺便说一下B)时要舍弃整数:
template< typename type_t, std::enable_if_t< std::is_floating_point_v< type_t >, bool > = false >
class A
{
...
}

template< typename type_t, std::enable_if_t< std::is_floating_point_v< type_t >, bool > = false >
class B
{
template< typename >
friend class A; // ============> Error!

...
}

通过阅读编译器消息,我了解到模板现在具有两个参数。但是,当我与类(class)交往时,应该将第二个参数放在什么位置?我尝试了template ,template 和template ...都无法编译。

这里有什么解决方案?

最佳答案

正如StoryTeller在评论中所说,类static_assertB中的A可能是一个更简单的解决方案。它不会使用第二个模板参数,并将启用熟悉的 friend 声明。

但是,如果您仍然想使用SFINAE方式,则可以在其中使用完整的SFINAE表达式来声明您的 friend :

template<typename type_t, std::enable_if_t<std::is_floating_point_v<type_t>, bool> = false>
class B
{
template<typename T, std::enable_if_t<std::is_floating_point_v<T>, bool>>
friend class A;
};

关于c++ - 使用SFINAE的C++ friend 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62109526/

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