小编Luc*_*cci的帖子

模板类中非模板成员函数的 require 子句

我有一个简单的模板类A。如果满足某些要求,我想启用一项功能。

解决方案 1 -requires子句

我尝试的第一个解决方案如下:

template <class T>
class A
{
public:
    void a(void) requires (same_as<T, int>)
    {
        std::cout << "a" << std::endl;
    };
};
Run Code Online (Sandbox Code Playgroud)

这效果非常好。我可以打电话,A<int>().a()但不能A<char>().a();。此外,IntelliSense 可以正确识别 Visual Studio 中的使用错误。

我尝试将函数定义移到类之外,但在 Visual Studio 中出现 C2511 编译器错误。在海湾合作委员会,它工作得很好。

template <class T>
class A
{
public:
    void a(void) requires (same_as<T, int>);
};

template <class T>
void A<T>::a(void)
requires (same_as<T, int>)
{
    std::cout << "a" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

您认为我的代码不正确还是 Visual Studio 编译器错误/功能不完整?


解决方案2-static_assert

该解决方案在某些情况下有效,但如果您尝试显式模板实例化(例如template …

c++ templates visual-studio c++20 requires-clause

11
推荐指数
1
解决办法
1970
查看次数

标签 统计

c++ ×1

c++20 ×1

requires-clause ×1

templates ×1

visual-studio ×1