如何在 MSVC 中使用 BOOST_HOF_LIFT 和 BOOST_HOF_LIFT_CLASS?

问题描述

(这是对我的 this 问题的部分跟进。)

正如我在 this self-answer 中所写,我发现 Boost 提供了一个 macro to wrap a template function in a function object so it can be passed to higher-order functions

#include <boost/hof.hpp>
#include <cassert>
#include <algorithm>

// Declare the class `max_f`
BOOST_HOF_LIFT_CLASS(max_f,std::max);

int main() {
    auto my_max = BOOST_HOF_LIFT(std::max);
    assert(my_max(3,4) == std::max(3,4));
    assert(max_f()(3,4));
}

关键是 MSVC 的情况不太好,这个问题困扰着我,尤其是当某些模板参数无法推导出并且必须明确提供相应的参数时,例如 std::get ,只是举个例子。

以下适用于 GCC,但使用 MSVC 时出错

template<int N>
auto constexpr getNth_a = BOOST_HOF_LIFT(std::get<N>);
// usage
std::tuple<int,int> t{1,2};
getNth_a<0>(t); // errors with MSVC

所以我尝试了 BOOST_HOF_LIFT_CLASS,但在模板化时我无法让它工作,即使在 GCC 中也无法工作:

template<int N>
BOOST_HOF_LIFT_CLASS(getNth_b,std::get<N>);
// attempted usage
std::tuple<int,2};
getNth_b<0>(t); // doens't even work with GCC

Here's a demo.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...