gpt4 book ai didi

c++ - 编译时 C++ 项目抛出错误 C2228,这不是预期的,因为控件在运行时未到达该点

转载 作者:行者123 更新时间:2023-11-30 04:56:10 24 4
gpt4 key购买 nike

基类包含公共(public)函数 Bar()。foo() 是一个带有一个参数的通用函数当我传递派生类的对象时它工作正常但是当我传递内置数据类型时它必须抛出异常但它在 Visual Studio 中显示编译时错误 C2228。

class Base
{
public:
void Bar();
};

class Derived:Base
{};

template<typename T>
void foo(T object)
{
if(std::is_base_of<Base,T>::value == true)
object.Bar();//Control does not reaches the point
else
throw "Invalid Parameter";
}
int main()
{
Derived objDerived;
foo(objDerived); //WORKS GOOD
foo(2);//ERROR C2228
}

最佳答案

您想要的是 c++17 if constexpr。否则,您将尝试实例化导致错误的分支。这在 vs2017 中可用。

在 c++11 中,您需要两个函数,而不是一个,并使用 enable_if 代替。

关于c++ - 编译时 C++ 项目抛出错误 C2228,这不是预期的,因为控件在运行时未到达该点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717429/

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