中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c++ sfinae在模板元編程中的高級應用案例

c++
小樊
84
2024-08-15 16:07:41
欄目: 編程語言

  1. 判斷類型是否有指定成員函數
#include <iostream>

template <typename T>
struct has_member_function_foo
{
private:
    template <typename U>
    static auto test(int) -> decltype(std::declval<U>().foo(), std::true_type{});
    
    template <typename>
    static std::false_type test(...);
    
public:
    static constexpr bool value = std::is_same_v<decltype(test<T>(0)), std::true_type>;
};

struct A
{
    void foo() {}
};

struct B
{
    // No foo()
};

int main()
{
    std::cout << has_member_function_foo<A>::value << std::endl; // 1
    std::cout << has_member_function_foo<B>::value << std::endl; // 0
    return 0;
}
  1. 判斷類型是否為可調用對象
#include <iostream>

template <typename T>
struct is_callable
{
private:
    // SFINAE test
    template <typename U>
    static auto test(int) -> decltype(std::declval<U>()(), std::true_type{});

    template <typename>
    static std::false_type test(...);

public:
    static constexpr bool value = std::is_same_v<decltype(test<T>(0)), std::true_type>;
};

struct F
{
    void operator()() {}
};

int main()
{
    std::cout << is_callable<F>::value << std::endl; // 1
    std::cout << is_callable<int>::value << std::endl; // 0
    return 0;
}

這些案例展示了如何使用SFINAE技術來檢查類型的特定特征,這是模板元編程中非常有用的一種技服。

0
册亨县| 呼和浩特市| 二手房| 张家港市| 桓台县| 宁阳县| 白玉县| 灌南县| 宜都市| 枣庄市| 夏邑县| 鄱阳县| 文山县| 怀宁县| 黄平县| 阜阳市| 太仆寺旗| 三门县| 莱西市| 嘉峪关市| 积石山| 洱源县| 枣庄市| 镇雄县| 溧阳市| 西安市| 唐海县| 杭锦旗| 高淳县| 得荣县| 汉沽区| 邯郸县| 三江| 醴陵市| 丹巴县| 花莲市| 前郭尔| 九寨沟县| 韩城市| 湖北省| 宿州市|