有没有更好的方法来初始化C++代码中的C结构?
我可以在变量声明点使用初始化列表; 但是,如果在编译时不知道所有参数,或者如果我没有声明本地/全局实例,那么这没有用,例如:
遗留C代码,它声明了结构,并且还使用了API
typedef struct
{
int x, y, z;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
使用C库的C++代码
void doSomething(std::vector<MyStruct> &items)
{
items.push_back(MyStruct(5,rand()%100,items.size()));//doesn't work because there is no such constructor
items.push_back({5,rand()%100,items.size()});//not allowed either
//works, but much more to write...
MyStruct v;
v.x = 5;
v.y = rand()%100;
v.z = items.size();
items.push_back(v);
}
Run Code Online (Sandbox Code Playgroud)
创建本地实例然后一次设置一个成员(myStruct.x = 5;等)是一个真正的痛苦,当尝试将20个不同的项添加到容器时有点难以阅读...
我已经看到很多关于从字符串中实例化类的问题但是却无法以相同的方式找到有关创建结构的任何信息.
我有一个包含如下结构的类:
Public Structure callDetails
Public GUID As Guid
Public ringTime as Date
Public CBN As String
Run Code Online (Sandbox Code Playgroud)
等等
我真正想做的就是从结构中获取字段名称.我不在乎操纵字段中的数据.
到目前为止,我可以非常接近这一点.
callDetails callTableDef= new callDetails();
Type tableType = callTableDef.GetType();
object tableStruct = (object)Activator.CreateInstance(tableType);
System.Reflection.FieldInfo[] fields = tableType.GetFields();
foreach (System.Reflection.FieldInfo field in fields)
Debug.WriteLine(field.Name + " = " + field.GetValue(tableStruct));
Run Code Online (Sandbox Code Playgroud)
但是,我仍然需要使用实际名称创建结构的实例.我希望能够传入这样的字符串:
Type tableType = System.Type.GetType("callDetails");
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我从Activator.CreateInstance()得到一个ArgumentNullException
是不是getType应该查找作为字符串传递给它的值并返回类型?
我是C#的新手,在这个项目之前主要用Java编程.
这可能是C编程语言中最简单的问题之一......
我有以下代码:
typedef struct node
{
int data;
struct node * after;
struct node * before;
}node;
struct node head = {10,&head,&head};
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以使头部成为*头部[使其成为指针]并且仍然可以使用"{}"[{10,&head,&head}]来声明头部的实例并仍然将其留在全球范围?
例如:
//not legal!!!
struct node *head = {10,&head,&head};
Run Code Online (Sandbox Code Playgroud) 我正在运行一个有3个结构的程序,我在二进制文件中读/写的操作如下:
struct Medico
{
int Id_Doctor;
int Estado;
char Nombre[60];
char Clave_Acceso[20];
char Especialidad[40];
struct Medico *next;
};
typedef struct Medico *Medicazos;
typedef struct Medico Meds;
Medicazos Nuevo;
FILE *Archivaldo;
char especialida[40], password[20];
char nombre_doc[60];
int estado_doc, id_doc;
Archivaldo=fopen("md.dat", "rb");
fclose(Archivaldo);
if((Archivaldo=fopen("md.dat", "rb"))==NULL)
{
printf("No se pudo abrir el archivo de Medicos\n"); //couldnt open file msg
exit(1);
}
rewind(Archivaldo);
while(!feof(Archivaldo))
{
if(*Inicio != NULL) //read from file and write in struct
{
Nuevo = (Medicazos) malloc (sizeof(Meds)); //new=pointer
fread(&id_doc, sizeof(int), …Run Code Online (Sandbox Code Playgroud) // By using structure :
struct complex {
float real;
float imag;
};
complex operator+(complex, complex);
main() {
complex t1, t2, t3;
t3 = t1 + t2;
}
complex operator+(complex w, complex z) {
statement 1;
statement 2;
}
// By using class :
class complex {
int real;
int imag;
public:
complex operator+(complex c) {
statement 1;
statement 2;
}
main() {
complex t1, t2, t3;
t3 = t1 + t2;
}
Run Code Online (Sandbox Code Playgroud)
在使用结构时,重载函数可以接受两个参数,而在使用类时,重载函数只接受一个参数,当重载操作符函数在两种情况下都是成员函数时,即在struct和class中.为什么会这样?
如何在顶点着色器中到达这种轻型结构?
struct LightInfo {
vec4 Position; // Light position in eye coords.
vec3 La; // Ambient light intensity
vec3 Ld; // Diffuse light intensity
vec3 Ls; // Specular light intensity
};
uniform LightInfo Light;
Run Code Online (Sandbox Code Playgroud)
我试过了:
shaderProgram.Light = gl.getUniformLocation(shaderProgram, "Light");
Run Code Online (Sandbox Code Playgroud)
编译,但当我尝试插入一些值,如:
gl.uniform4f(
shaderProgram.Light.Position,
parseFloat(document.getElementById("lightPositionX").value),
parseFloat(document.getElementById("lightPositionY").value),
parseFloat(document.getElementById("lightPositionZ").value),
0.0
);
Run Code Online (Sandbox Code Playgroud)
它完全打破了.如何将此位置数据发送到着色器结构?
考虑以下.
a(1).x = [1 2 3];
a(2).x = [4 5 6];
Run Code Online (Sandbox Code Playgroud)
[a.x]会给你的[1 2 3 4 5 6].
如何轻松搞定[1 2 3; 4 5 6].即,不使用重塑,例如.
PS语法[a.x;]很酷.
我目前正在研究一个django项目.我不是django中的新手,但是在确定如何组织某些文件的最"djangonic"方法方面有一些困难.
我有一些计算东西的classe,可以从manage.py的cli和webservice应用程序中使用.这些计算使用我的核心应用程序中的模型并调用数据库.
我面临的问题是我无法确定将源文件放在何处.
我不想把它们放在'lib'文件夹中.我认为这个文件夹中的模块将是django独立模块.
目前,该模块是我的应用程序的模型.但由于它没有定义任何新的结构,我认为这不是最干净的方式.
有什么意识到拥有一个尊重'django生活方式'的干净结构?
谢谢
我使用此结构作为链表:
typedef struct Node{
int value;
struct node_t* next;
}node_t;
Run Code Online (Sandbox Code Playgroud)
一切工作都很好,直到我将其放在字段struct node_t* next之前为止int value,然后我在该结构上有很多垃圾值。是关于错误的实现还是代码中的其他内容?
我编写了这段代码来迭代结构的成员.它工作正常.我可以对具有混合类型元素的结构使用类似的方法,即一些整数,一些浮点数和......?
#include <stdio.h>
#include <stdlib.h>
struct newData
{
int x;
int y;
int z;
} ;
int main()
{
struct newData data1;
data1.x = 10;
data1.y = 20;
data1.z = 30;
struct newData *data2 = &data1;
long int *addr = data2;
for (int i=0; i<3; i++)
{
printf("%d \n", *(addr+i));
}
}
Run Code Online (Sandbox Code Playgroud)