How can you actually create private fields in a C struct? I got the concept of VTable and inheriting methods aswell overriding them, but private variables can be obtained with static keyword in sourcefile. If you have variables in a struct, you can access them as soon as you got a ref to the struct. The functions are easy:
Code:
struct classA { pointerToFunction *p; } static void* thePrivateFoo() { } void* publicFoo() { thePrivateFoo(); /* or something like that */ } ... /*in init code somewhere in the c file */ classAInstance->p = publicFoo;
But I was thinking about the variables... How is this achievable? I was thinking of a struct with only get/set functions and with no datamembers at all. All vars to be static outside the struct. But this kind of destroys the encapsulation.
I'm currently working on the ioquake3 engine . The ioquake3 engine is separated into 2 different main threads at runtime: the gamecode and the engine. Both are communicating but not all information and my problem resides here.
In the gamecode, there's a struct called gentity_t which contains a lot of fields:
Code: typedef struct gentity_s gentity_t; struct gentity_s { entityState_ts;// communicated by server to clients entityShared_tr;// shared by both the server system and game // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER // EXPECTS THE FIELDS IN THAT ORDER! //================================ struct gclient_s*client;// NULL if not a client
[Code] ....
This whole entity is passed to the engine at runtime, but only the first two fields are declared for the engine:
Code: // the server looks at a sharedEntity, which is the start of the game's gentity_t structure typedef struct { entityState_ts;// communicated by server to clients entityShared_tr;// shared by both the server system and game } sharedEntity_t;
My problem is that I need to access the health field of gentity_t from the engine. Technically, this is possible, but the health field is not declared in sharedEntity (which is the same memory address than gentity_t in the gamecode), so this is not straightforward.
I am looking for an elegant way to do this, and my constraint is that I must not edit the gamecode, only the engine.
The solutions I've thought:
- Just copy the whole gentity_t fields into sharedEntity_t. This would work I think but would be redundant, and I would like to avoid copying this huge set of fields.
- Include the two headers files declaring the gentity_t and sharedEntity_t structs, and create a Getter and a Setter functions that would cast a gentity_t over a sharedEntity_t and return/set a field. The problem is that I can't simply include them because they are both including some common headers files and this produce a recursive include error (and I can't modify the files to add a check, these are normally in the gamecode).
- Directly access the health field using a clever memory pointer, but I don't even know if that's possible given the huge number of fields prior health with many different types?
I understand template functions and how to call them explicitly when no arguments are passed to them but can't seem to instantiate them explicitly when it resides within a class or struct.
Is there a way to use preprocessing to conditionally return different types in a template. More specifically, is there a way to use preprocessing to block out conditional parts of code for one type verse another?
Example of what I can't get to compile for anything but POD types:
If I switch string to long, the implied conversions let it work. I'm imagining there might be some preprocessing way to hide irrelevant conditions. I mean, this code would cause an error to return a string when T=double, so I get why there is a compiler error. However, is there a way to make that part of the code get hidden in that case when the template is processed when T=double?
I'm quite new to C and these days I have been playing around with a linked list. I managed to make a working version using pointers, ad only for the sake of learning I was trying to do the same thing just passing the "Object reference" Here is the method that apparently doesn't work..
Code:
struct Node addNode(struct Node head){ int value; struct Node *n; printf("Please enter the value "); scanf("%d", &value);
[Code]...
when I return the function i have something like: head=addNode(head)
Unfortunately it does not work the way I aspect. I suppose that there is something I have left out..
Code: like n->next=&head // passing the address of the head at the next pointer of the struct head =*n //copy the values of the new node to the old head..
There must be something wrong with this line.. return head; What have I done wrong?
test.cpp: In function ‘int main()’: test.cpp:20:30: error: no matching function for call to ‘func1(std::vector<int>&)’ test.cpp:20:30: note: candidate is: test.cpp:8:45: note: template<class T, class U> std::map<T, T> func1(U) test.cpp:8:45: note: template argument deduction/substitution failed: test.cpp:20:30: note: couldn't deduce template parameter ‘T’
i need to return a struct pointer dynamically allocated inside a function call void function() which is done using 'out parameters' in following code
struct my_struct { int x; } void my_function( my_struct** result ) { my_struct* x = new my_struct{ 10 }; //... *result = x; }
Now i have a doubt, so if i want to print the return value from struct pointer, should i need to print it in the void function() or in the caller the function...
I am using set in my code to get fields from a reader xml which are being errored out but it is storing it in ordered form(i.e it is internally sorting it) not in accordance to how the reader xml has the fields. What should i do so that it write the errored file in accordance to the reader xml.
I am using set in my code to get fields from a reader xml which are being errored out but it is storing it in ordered form(i.e it is internally sorting it) not in accordance to how the reader xml has the fields.What should i do so that it write the errored file in accordance to the reader xml.
I have made the following code to illustrate my problem:
#pragma once #include <bitset> #include <iostream>
[Code].....
Now I want to avoid my bitset field being constructed before the ConstructTest constructor is called. So at first I tried wrapping it in a unique_ptr but found out that this would give me some potential problems with const functions.
And then I realized I could just set it to NULL, as I have in the above code. I tried that, got unexpected print outs, until I found out that NULL is just equal to 0 in C++ and that the bitset has a = operator that takes a number, int, long or maybe something else. Either way, this effectively constructs the bitset and sets it to the number 0.
So my efforts so far have been shut down. But then how can I avoid the bitset being constructed in advance, if at all possible?
reading and writing 2D arrays I've been trying out a few tutorials using FileStream but I couldn't get any of them to work.
Anyway what I'm trying to do is save the playerArray to a .txt file and then read from that .txt into the fields within the GUI. This is supposed to act as a database.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;
And a few more (up to 3000). These defines are used to read certain fields from a DICOM image, that give information about that image (Patient Name, etc…). However I don’t wish to read all these fields. Instead I’m trying to load an .ini configuration which will configure which fields to read. For example:
[PROPERTIES] # Fields to read fields=PatienId,Modality
This would only retrieve the Patient Name and a Modality.
The problem is, the values I retrieve from the .ini file (reading and parsing the file with std::fstream) come as a string. How could I retrieve, for example, the defined value from PatientId, i.e. “(0x0010, 0x0020)”? Something like std::cout << # << "PatientId"; won't work.
So I'm rewriting an old project of mine, and I'm trying to determine if there's truly any better way to map the data taken from a text file "dictionary" into the correct class fields for further processing. For example:
In each of these, I'd need the "value" (MY_FIRST_NAME, MY_LAST_NAME, etc) from the "keys" (FNAME, LNAME, etc) to be mapped to the proper class fields. Say, for example, I had this:
Class DataProcessing { public string Address; public string FirstName; public string LastName; public int TotalCalls; ... }
I would need DataProcessing.Address to be set to the value in the ADDR key/value pair. The same would be true for each other field. The problem is that based on the text file's source (which isn't under my control, and won't be changed anytime soon), the key/value pairs are not always in the same place...so a second file could have the data as such:
TOTCALLS=47 ADDR=123 SOMEWHERE LN, NOWHERESVILLE, TX 01234 LNAME=DARKPOETCC'S LAST NAME FNAME=DARKPOETCC'S FIRST NAME
Any smarter way to do this than looping through each line that was read in from the file, and determining where it belongs, such as (pseudo code follows):
IF FieldName == "TOTCALLS" THEN //Assign to TotalCalls field ELSEIF FieldName == "ADDR" THEN //Assign to Address field ELSEIF FieldName == (You get the picture...) //Do thing N_Field
I was attempting something weired with address to move data around when I discovered that the size of the array is not what I expected. I am passing this structure as &Users to a function that declares it as a void *, then I can deal with chunks of data (memmove) and not have to worry about index or things like that. However...sizeof is returning something I do not understand.
I'm trying to implement a simple template array class, but when i came into the operator< i actually have to use a template :
my code is something like :
template<typename _Type, std::size_t _Size> class array { public :
[Code] ......
but i am having an error of shadows template param 'class _Type' is it w/ the name conflict between the array template parameter and the function template parameter ?
Error1error C2955: 'DoubleLinkedListInterface' : use of class template requires template argument listdoublelinkedlist.h10 Error2error C2244: 'DoubleLinkedList<T>::DoubleLinkedList' : unable to match function definition to an existing declaration doublelinkedlist.cpp7
Error3 .cpperror C2244: 'DoubleLinkedList<T>::~DoubleLinkedList' : unable to match function definition to an existing declaration 12
.h
#pragma once #include "DoubleLinkedListInterface.h" #include "Node.h" #include <iostream>