【发布时间】:2013-05-11 10:44:12
【问题描述】:
我正在编写一个托管 C++ 程序,该程序运行用户编写的即时编译的 C 代码。从 C 代码中捕获并处理/忽略某些典型异常是绝对重要的。 为此,我从结构化异常处理块中调用 C 代码。由于这个块的性质和语义(以及它的调用位置),我已经将实际调用分离到它自己的函数:
template <typename ret_type, class func>
static ret_type Cstate::RunProtectedCode(func function) {
ret_type ret = 0;
__try {
ret = function();
}
__except(ExceptionHandler(GetExceptionCode(), ExceptionStatus::CSubsystem)) {
fprintf(stderr, "First chance exception in C-code.\n");
}
return ret;
}
效果很好:
RunProtectedCode<int>(entry);
但是是否有可能对它进行整形,以便我可以调用具有可变数量参数的函数-也许通过使用一些奇异的函子(显然唯一的要求是它不能有析构函数)?我正在使用 MSVC++ 2010。
【问题讨论】:
-
有可变参数模板,但恐怕VS 2010不支持。
-
不介意升级到VS2012,如果它可以在那里完成。可以做个代码示例吗?
-
遗憾的是,VS2012 也不支持可变参数模板。
-
@Xeo,非常正确,但如果允许的话,现在还有 CTP。
-
@chris: 可惜 CTP 包含我们所说的 buggyadics :/