我正在将一些 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
实际上,这可以进一步简化以出现,就像我们在运行时进行推论一样,即使它仍在编译时进行:
#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;
}
输出相同。
关于java - 如何判断一个对象是否是 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213362/