java - 如何判断一个对象是否是 vector

标签 java c++ vector code-translation

我正在将一些 Java 代码转换为 C++,但我在使用此函数时遇到了问题。

private static boolean isArray(Object aObject){
   return aObject.getClass().isArray();
}

基本上,我需要知道一个对象是否是任何类型和模板的 vector 。 (我在我的 C++ 代码中使用 vector 而不是数组。)

例如,输出应该是这样的。

//define some variables
int a=3;
double arr[]={1.0,2.0,3.0,4.0};
vector<int> vecint ({1,2,3});
vector<double> vecdouble ({1.0,2.0});
Class B {};


//function output:
bool b;

b=function(a); //returns false
b=function(arr); // returns false
b=function(vecint); //returns true
b=function(vecdouble); //returns true
b=function(B); //returns false

最佳答案

在 C++ 中,并非所有事物都是对象。一个函数可以接受任何东西,而且在 C++ 中并不是所有东西都是对象。因此,如果传递给函数的随机事物是 vector 或完全不相关的事物,则很难进行运行时推断。此外,如果不求助于 void*(请不要)、模板,就不可能声明一个可以接受任何的函数>,或某种 variant 对象。

但是我们可以利用一点模板元编程在编译时推导它:

#include <cstdlib>
#include <vector>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

template <typename Type>
class IsArray;

template<typename Element> class IsArray <vector <Element>>
{
public:
  enum { mValue = true };
};

template<typename Item> class IsArray
{
public:
  enum { mValue = false };
};

int main()
{
    int n = 42;
    cout << "An int is a vector: " << boolalpha << IsArray<int>::mValue << endl;
    vector <int> v;
    cout << "A vector <int> is a vector: " << boolalpha << IsArray<vector<int>>::mValue << endl;
    
}

输出:

An int is a vector: 0
A vector <int> is a vector: 1

Live demo


实际上,这可以进一步简化以出现,就像我们在运行时进行推论一样,即使它仍在编译时进行:

#include <iostream>
#include <vector>
using namespace std;

template <typename Element> bool IsArray (const vector <Element>& vec)
{
  return true;
}

template <typename Item> bool IsArray (const Item& item)
{
  return false;
}

int main()
{
    int n = 42;
    cout << "An int is a vector: " << boolalpha << IsArray (n) << endl;
    vector <int> v;
    cout << "A vector <int> is a vector: " << boolalpha << IsArray (v) << endl; 
}

输出相同。

Live Demo

关于java - 如何判断一个对象是否是 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213362/

相关文章:

C++ vector push_back() 覆盖另一个相同类型的 vector ?

java - 用于存储 html 解析器规则的文件格式

java - 如何为 JUnit 测试记录和重用数据库结果

java - Selenium:我应该选择什么预期条件

c++ - 如何将字符串与 chrono::milliseconds 连接起来?

c++ - 我如何使用 boost::adaptors::transformed 从模板类和 vector 生成范围?

java - 如何配置 JBoss 6.3.0GA 使用 RMI JMX?

c++ - fstream中多个get()和单个getline()的理论性能差异

vector - 从 Rust 中的向量构建 HashSet

c - GNU GSL 对两个 vector 进行排序