gpt4 book ai didi

c++ - 使用 Boost 确保模板参数继承自某个类

转载 作者:行者123 更新时间:2023-11-30 01:26:24 25 4
gpt4 key购买 nike

我只是注意到我的代码重复了很多这种结构:

if( someErrorHappened ){
string errorMsg = "Falcon Punch!";
::GetErrorLoggerInstance()->Log( LOG_TYPE_ERROR, "class", "method", errorMsg );
throw SomeCustomException( errorMsg );
}

我想我可以写一个模板函数,这样我就可以用这样的单行代码替换所有那些:

LogAndThrowIfError<SomeCustomException>( someErrorHappened, "class", "method", "Falcon Punch!" );

凭借我的基本模板知识,我可以很好地做到这一点。我的问题是,如果模板参数是一个不从特定类继承的类,我可以使用 Boost 来确保发生编译错误吗? (即我只想让这个函数用于我的自定义异常)。有点像 C# 的 where 泛型关键字。

这可能看起来有些牵强,但我需要强制执行此操作,因为我们的应用程序具有托管和非托管代码,并且我们的自定义 native 异常被映射到自定义托管异常,这就是为什么这应该只用于我们的异常。

我在 Visual Studio 2010 中工作,所以我没有所有花哨的 C++11 东西,只有其中的一些(移动语义是最丰富的)。

最佳答案

尝试

 BOOST_STATIC_ASSERT(( boost::type_traits::is_base_of< ExceptionBaseClass, T >::value ));

它在内部执行与@Zolyomi 在他的回答中发布的相同的检查。

关于c++ - 使用 Boost 确保模板参数继承自某个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517919/

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