gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:25 26 4
gpt4 key购买 nike

我正在将一些 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com