Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何反思boost::hana::map<&燃气轮机;在执行SFINAE时,是否没有它的(constexpr)实例?_C++_Sfinae_Boost Hana - Fatal编程技术网

C++ 如何反思boost::hana::map<&燃气轮机;在执行SFINAE时,是否没有它的(constexpr)实例?

C++ 如何反思boost::hana::map<&燃气轮机;在执行SFINAE时,是否没有它的(constexpr)实例?,c++,sfinae,boost-hana,C++,Sfinae,Boost Hana,是否可以在不访问boost::hana::map对象的情况下检查键是否存在,甚至检查值类型,而只检查其类型?(执行SFINAE。) 下面是一段代码,它创建了一个key->set的映射,并希望检查set是否包含元素,而不需要访问该映射的实例: #包括 #包括 模板 结构双\u键\u有\u 2 :public std::false\u类型 { }; 模板 结构双\u键\u有\u 2 > :public std::true\u类型 { }; int main(){ 名称空间hana=boost::ha

是否可以在不访问
boost::hana::map
对象的情况下检查键是否存在,甚至检查值类型,而只检查其类型?(执行SFINAE。)

下面是一段代码,它创建了一个key->set的映射,并希望检查set是否包含元素,而不需要访问该映射的实例:

#包括
#包括
模板
结构双\u键\u有\u 2
:public std::false\u类型
{
};
模板
结构双\u键\u有\u 2
>
:public std::true\u类型
{
};
int main(){
名称空间hana=boost::hana;
自动生成我的地图=hana::生成地图(
hana::make_pair(hana::type_c,
hana::生成集合(
hana::int_c,
hana::int_c,
hana::int_c
)
),
hana::make_pair(hana::type_c,
hana::生成集合(
hana::int_c,
hana::int_c,
hana::int_c
)
)
);
static_assert(双_键_有_2::value);//应该传递
返回0;
}

或者换句话说,如果传递了
std::declval()
objects,所有在hana数据结构上操作的函数都能工作吗?

要将类型用作实例而不实际实例化它,可以使用
std::declval()

因为您要在嵌套数据结构中查找键,所以可以使用它返回一个可以链接的Monad

模板
结构双\u键\u有\u 2
:public std::true\u类型
{
};

从你的例子来看:

是的,如果我能使用
std::declval()
事情就变得可能了。对我来说,
std::declval()
是否有效并不明显。这是否适用于所有hana功能?在C++ C++元编程库中,数据对象有反直观性,因为它们通常通过模板/类型系统本身来计算计算。“这将对所有HANA函数起作用吗?”是的,我认为所有C++函数都会使用它,因为您只对嵌入在返回类型中的数据感兴趣。顺便提一下,还有
hana::declval(hana::type_c)
#include <boost/hana.hpp>
#include <type_traits>

template<typename HanaMapType, typename = void>
struct double_key_has_2
    : public std::false_type
{
};

template<typename HanaMapType>
struct double_key_has_2<HanaMapType,
    std::enable_if_t<
        std::is_same_v<HanaMapType, void> // (a placeholder to keep code compilable)

        // detect a boost::hana::map<...>,
        // that has a boost::hana::set<...> under hana::type_c<double> key,
        // which contains boost::hana::hana::int_c<2>
    >
>
    : public std::true_type
{
};

int main() {
    namespace hana = boost::hana;

    auto my_map = hana::make_map(
        hana::make_pair(hana::type_c<double>,
            hana::make_set(
                hana::int_c<0>,
                hana::int_c<1>,
                hana::int_c<2>
            )
        ),
        hana::make_pair(hana::type_c<int>,
            hana::make_set(
                hana::int_c<3>,
                hana::int_c<4>,
                hana::int_c<5>
            )
        )
    );

    static_assert(double_key_has_2<decltype(my_map)>::value); // this should pass

    return 0;
}