C++ :: CRTP And Covariant Return Types

Feb 9, 2012

I am interested in exploring covariant return types, but my attempt to implement them via CRTP is not working. How to accomplish what I am attempting.

Let's take a virtual clone() method as an example.

Code:
class Base {
virtual Base* clone() const = 0;
};
template <typename Derived>
class Base_CRTP: public Base {

[Code] .....

This setup is giving me :

file.cpp: error C2555: 'Base_CRTP<Derived>::clone': overriding virtual function return type differs and is not covariant from 'Base::clone'

It makes sense that even though Derived actually *is* a direct descendant of Base, this might not be recognized because Derived is a template argument. But is there any easy way around this that doesn't require using a different function name or duplicating the clone() logic in every derived class?

View 2 Replies


ADVERTISEMENT

C :: Errors For Incompatible Types In Return

Oct 23, 2013

I am writing a program in C. The following is an extract from my code:

Code:

enum coin_types{
FIVE_CENTS=5,
TEN_CENTS=10,
TWENTY_CENTS=20,
FIFTY_CENTS=50,
ONE_DOLLAR=100,
TWO_DOLLARS=200

[Code] .....

I'm getting the following errors:

For: new = new_coins_data_line(line);
"Incompatible types in assignment"

For: return newdata;
"Incompatible types in return"

There seem to be problems with my variables and perhaps it is related to the type 'struct coin' which has an enumerated type within it.

View 5 Replies View Related

C++ :: Conditionally Return Different Types In Template

Apr 10, 2014

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:

template <class T>returnTypeMatching(string inputName,string typeName) {
if(typeName="string") {
cerr<<"string types matched so returning string '"<< inputName <<"'"<<endl;
return inputName;

[Code] .....

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?

View 11 Replies View Related

C++ :: Why CRTP Used Instead Of Virtual Functions

Jan 31, 2014

I was reading about the CRTP, and I can't for the life of me understand it's advantages over virtual functions.

Unless you're coding embedded systems, and can't afford the few extra bytes for the vptr, or coding something requiring high-performance, where every nanosecond counts, I just don't see why the CRTP is so attractive. It just adds more text and forces every user class that wants to use the CRTP'd hierarchy to become a template class.

I tried implementing my Functor hierarchy with the CRTP instead of virtual functions...All it did was clutter my files with angle brackets and made the whole thing look very ugly.

View 14 Replies View Related

C :: Parameter Names Without Types And Conflicting Types In Fgets

Jan 22, 2014

I have this

Code:

#include<stdio.h>
#include<ctype.h>
#include<string.h>

int check_up(char string[]);
int check_low(char string[]);
void to_up(char string[]);
void to_low(char string[]);

[Code] .....

When I compile this I have the following problems: warning: data definition has no type or storage class [enabled by default] in 'to_up(word)'conflicting types in 'to_up' function and to_low function warning: data definition has no type or storage class [enabled by default] into_up function error: unknown type name "word" in line 'printf("All uppercase %s. ", word):;'warning: parameter names (without types) in function declaration [enabled by default] in 'to_up(word)'and 'to_low(word)' 'note: previous declaration of "to_up" was here in function declaration of to_up function

View 7 Replies View Related

C :: Will Return Root Statement At End Ever Return Value Other Than Value Passed To Function?

Mar 29, 2013

I'm writing some functions pertaining to binary trees. I've used recursion once before while learning quicksort but am still quite new and unfamiliar with it. And this is my first time touching a binary tree. So my question: In my addnode function, will the return root statement at the end ever return a value other than the value passed to the function?

Code:

#include <stdlib.h>
struct tnode
{
int data;
struct tnode * left;
struct tnode * right;
}

[code]....

View 4 Replies View Related

C++ :: Return By Reference - Statement Doesn't Return Value Of N

Jan 11, 2015

From the page: [URL] ....

#include <iostream>
using namespace std;
int n;
int& test();

[Code] ....

Explanation

In program above, the return type of function test() is int&. Hence this function returns by reference. The return statement is return n; but unlike return by value. This statement doesn't return value of n, instead it returns variable n itself.

Then the variable n is assigned to the left side of code test() = 5; and value of n is displayed.

I don't quite understand the bold sentence. Shouldn't value of n and variable n be the same?

View 8 Replies View Related

C/C++ :: Difference Between Return 0 And Return -1

Oct 17, 2013

difference between return 0 and return -1 .and exit(0) and exit(1)

View 1 Replies View Related

C++ :: Using New On Primitive Data Types

Dec 12, 2014

int* count;
count = new int(1); // what???

Is this on the heap?? do i have to delete it now?

So is 'new' on a primitive data type just a way for me to allocate primitive data types (int, char, etc.) on the heap instead of the stack?

And, out of curiosity, can you do that in Java?

View 4 Replies View Related

C++ :: How To Convert Data Types

Jan 9, 2015

How to convert these data types? i have an array of bytes in unsigned char[] array, and need to convert to const void* pointer.

View 3 Replies View Related

C++ :: Operand Types Are Incompatible

Oct 14, 2013

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main() {
double temp, result;
char type;

[Code] .....

View 2 Replies View Related

C++ :: Object That Contains 2 Types Of Data

May 24, 2014

How do you create an object (like in the title) something more simple than a struct? I wanna know that cuz I'm writing a function that could return a boolean and an integer at the same time.

View 2 Replies View Related

C# :: Working With Different Types And Casting?

Jan 3, 2015

double a = 1.0 + 1 + 1.0f; //everynumber will be added up as a double even the last one which is a float. All 3 numbers will turn into 3.0 as a double.

int x = (int)(7 + 3.0 / 4.0 * 2); //the variable will do the math bracket first. then the va type will still be an int because int was never changed.

Console.WriteLine((1 + 1) / 2 * 3); // 1 + 1 will be done first then 1 / 2 then * by 3
Console.WriteLine(x);
Console.ReadKey();

I THINK THATS ALL WRONG ^ =/ like the comments

double a = 1.0 + 1 + 1.0f;

In this equation, everything is using addition, so we start working left to right. 1.0 + 1 is the first step. These two representations of 1 aren't the same type though. In fact, none of the three are.

The first is a double, the second is an int, and the last is a float.

So in order to do 1.0 + 1, we need to convert one type to another. Since the double type is "wider" than the int type, we'll move things up to the double type. We'll convert the int version to a double, and to 1 + 1 using double types, resulting in 2.0 as a double.

Next we do the other addition. This has the same problem, though, because we'll be adding our result from the first step (a 2 as a double) to a float. So again, the float gets converted up to a double and we do the addition using doubles.

We now have a value of 3 that is the double type, which we can simply store in our a variable without any conversions at all, since our value is already a double type.

View 4 Replies View Related

C/C++ :: ISO Forbids Comparison Between Ptr And Int For Types

Jul 14, 2014

This is some code that simulates files and directories the same way an operating system does so. I commented out every std::string occurrence because I got the :

terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create

View 3 Replies View Related

C++ :: Passing Types To Functions

Jan 12, 2013

I've got a game engine with a line-trace collision method which returns the first object it hits. I'd like to be able to pass it a class-type so that it can ignore objects of other types.

consider this pseudo-code:

Entity* TraceEntity( const Vec3f& LineStart, const Vec3f& LineEnd, const Type atype ) {
// check collision on entities, ignore entities of type 'atype'.
// return whatever it finds
}

I'd like to do this without template classes because it will result in a significant bloat in executable size every time I decided to trace for a new entity type (I've really developed a distaste for templates for this reason)

using type_info only checks for an object's deepest subclass, so it won't work for class C : public B : public A if I'm looking for classes of type B.

View 5 Replies View Related

C Sharp :: What Are Different Types Of Interfaces

Jul 11, 2013

he was asking various types of implementing interfaces in csharp,

View 1 Replies View Related

C/C++ :: Instantiate Template For Certain Types

Dec 17, 2012

Is there a way in either Visual Studio 2010 or g++ (any version) to see what classes it instantiates and their code? For example to see if i avoid code bloat when i explicitly instantiate a template for certain types.

View 3 Replies View Related

C++ :: What Are The Implications Of Declaring Data Types But Never Using Them

Mar 26, 2013

What are the possible problems if I declare a bunch of data types and never use them? Do they take up a lot of memory? Will they slow run time? If it is an array do I have to delete it at the end of the program? What if the array is defined inside a class and never used? Do I still have to delete it?

i.e.

Code: class declarearrays{
public:
double **darray;
double **darray2;
void function1();//function that initializes darray
void function2();//function that initializes darray2 with different parameters, may not be used.
};

View 1 Replies View Related

C :: Error - Incompatible Types In Assignment

Oct 11, 2013

I am working on a double linked list and inside of my function to insert a node, I am getting an error of "Incompatible types in assignment". Here is my function code. Line 55 is where I am receiving the error.

Code:

45 struct lnode *ins_llist(char data[], struct llist *ll){
46 struct lnode *p, *q;
47
48 q = malloc(sizeof(struct lnode));
49 if ( q == NULL )

[Code]....

View 2 Replies View Related

C :: Conflicting Types Error When Compiling A Lib

Dec 24, 2014

I'm trying to compile a library for use with PoLabs Pokeys 56U USB device (PoKeys56U) on Linux Mint 17 64-bit.

I'm using the information from here - New cross-platform library for all PoKeys devices - MyPokeys

When I run

sudo make -f Makefile.noqmake install

I get the following errors;In file included from PoKeysLibCore.c:22:0:

PoKeysLib.h:38:28: error: conflicting types for "int64_t"
typedef long long int64_t;
^
In file included from /usr/include/stdlib.h:314:0,
from PoKeysLibCore.c:21:

[Code] ....

Here is the offending code from the header file;

Code:
#ifndef __POKEYSLIB
#define __POKEYSLIB
#define USE_STD_INT

#ifdef USE_STD_INT
#include "stdint.h"

[Code] ....

View 12 Replies View Related

C :: Variable Function Argument Types

Jun 12, 2013

I was wondering if one could write a function that could accept one or the other variable type.

Ex: I have 2 arrays, int** and double**, and a function

Code: void PGMWrite(double** Matrix, int Matrix_dimension){.....}

Is there any way to change the function to

Code: void PGMWrite(int** Matrix || double** Matrix, int Matrix_dimension){.....}

And then have some sort of type identifier in the function that picks the correct section via an if loop? If so how, and how would I identify in the function if the input it type double or int?

View 4 Replies View Related

C++ :: Generate Randomly 3 Objects Of Types

Nov 17, 2014

Is there any way to generate random types I build? I know rand command returns random integers, but I want to create some classes and and a function that will generate randomly 3 objects of the types I have created.

View 1 Replies View Related

C++ :: How To Manipulate Bits Of All Types For Storing

Aug 10, 2013

I need a translate (in both directions) all primitive types, into char[] (will be stored in string)

I understand how to manipulate integral types with bits and I cant just cut them down and shift them, but float and double don't work with this manipulation. So, how I can create a perfect bit copy of float and double?

int i = 0xFCED03A4; //Random number
char c[4];
c[0] = ((i >> 3) & 0xFF);
c[1] = ((i >> 2) & 0xFF);
c[2] = ((i >> 1) & 0xFF);
c[1] = (i & 0xFF);

[Code]...

This is basic stuff but I need an equivalent for float and double types, and it needs to be a perfect BIT copy, not value copy.

View 7 Replies View Related

C++ :: Map Storing Multiple Data Types

Jul 11, 2014

I am trying to create a generic map container which shell contain data of different datatypes. I already found a solution in this forum here:

[URL]...

Introducing a container with a Base Class as content type and inserting objectes of Derived Class types from that Base Class suites my implementation very well. But it is not really working. I implemented it this way:

class MyType {
public:
MyType() {}
virtual ~MyType() {}
}; template <class PT> class ParseType : public MyType

[Code]...

Then I insert one element.

// index being an object of type Parser<string>
ParseType<string>* test = new ParseType<string>( index );
// and index.val(0) = "-n"
iMap.insert( pair< string, MyType* >( index.id(0), test ) );

Now I think I should be able to call

const string key("-n");
iMap.at(key)->content->val(n);
Or
iMap.at(key)->get_val(n);

But neither one compiles with the error that "class MyType" (as the map container is pointing to a MyClass object) has no member/member function "content"/"get_val".

I also tried introducing member and member function "content" and "get_val" in "class MyType", which I thought should be hidden while constructing ParseType<string>. This would compile but it does not call the member "content or member function "get_val" from class ParseType.

A second try was to remove templatization of "class ParseType" and introduce a specific, let's say, "class ParseString" for objects of type Parser<string>. But the problems remain the same either the compiler complains due to missing member/member function or retreiving the map content will not call the derived class member/member function.

View 4 Replies View Related

C++ :: Handling Data Types As Inputs

Apr 10, 2013

I'm fairly new to C++ programming. I wanted to accept a datatype as an input. I've seen something similar while working with the <queue> library.

When defining a new object of queue

For example:

queue<int> Queue;

How is <int> handled ??

View 1 Replies View Related

C++ :: Accept Multiple Data Types

Jun 17, 2014

Basically I do not want to use a menu, instead just accept either an float or a single character. Then send the data to the appropriate spot based on the user input. I have been unable to convert the char to a float, and even if I did the char would probably only accept the first digit, say user enters '15' it would only read the '1'. I've tried strings instead of char but then unable to use the isalpha function. Do I need a char[] and then iterate through to get the numeric data? Then how do i make '1' and '5' become 15. There is probably a solution. I've also tried to use a loop waiting for the correct data while(!(cin >> letter)) which works but how do I get out if the user enters number.

#include <iostream>
#include <cctype>
#include <string>
#include <cstdlib>
using namespace std;

[code].....

View 3 Replies View Related







Copyrights 2005-15 www.BigResource.com, All rights reserved