首页 > 解决方案 > 如何比较两个 std::any?

问题描述

std::any 没有 operator==

我是否遗漏了一些明显的东西,还是我需要真正谋生?

有没有一些简单的方法来提供运营商?

https://godbolt.org/z/rdoWrcnTs

// Example program
#include <iostream>
#include <string>
#include <any>

int main()
{
    auto str1 = std::make_any<std::string> ("Hello");
    auto str2 = std::make_any<std::string> ("World");
    
    if(str1 == str2) std::cout << "same"; // error
}

标签: c++c++17

解决方案


没有直接的方法来比较两个对象,std::any因为基础类型可能不同。如果你知道它们是相同的,你可以写:

if(std::any_cast<std::string>(str1) == std::any_cast<std::string>(str2)) 
  // ...

推荐阅读