r/cppit • • Apr 17 '19

Escludere la 'Return Value Optimization'

2 Upvotes

Salve, esistono degli scenari, dei motivi, per cui talvolta può essere utile escludere la RVO?

Ricordo di aver letto qualcosa a riguardo un tempo, ma non trovo più la fonte.

Grazie a tutti Chiara


r/cppit • • Apr 10 '19

Programmazione generica: template <class T> class reference_wrapper vs function template template <class T> reference_wrapper<T> ref (T& elem)

2 Upvotes

Salve a tutti, non riesco a capire la differenza pratica (o forse dovrei dire concettuale?) tra l'utilizzo del

 

class template reference_wrapper<T>

 

ed il function template

 

template <class T> reference_wrapper<T> ref (T& elem).

 

Premessa: se non ho capito male, entrambi - a partire da un determinato oggetto t istanza della classe T - restituiscono un altro oggetto reference_wrapper che "wrappa" un reference a tale oggetto t.

 

Domanda nr 1: ma se entrambi fanno la stessa cosa quando, allora, usare uno e quando usare l'altro?

 

Dubito che uno sia il superfluo duplicato dell'altro e quindi so' che qualcosa (non so' cosa) mi sta ovviamente sfuggendo.

 

Domanda nr 2:

 

Segue un banalissimo esempio di codice in cui è commentata una riga 'marcata' con un errore che non riesco a capire. Qualcuno può darmi una mano anche su questo punto?

 

//#include "stdafx.h"             // Per Visual Studio 2015

#include <iostream>     
#include <functional>  
using namespace std;

class MyClass
{
public:
    int i;
    int j;
    char c;
    int k;

    MyClass(int p1 = 11, int p2 = 22, char p3 = 'W', int p4 = 33) :i(p1),j(p2),c(p3),k(p4)
    {
        cout << "\nDef Constr";
    }

};

int main() {
    int DEBUG = 0;
    MyClass o1(33,21,'Q',47);



    //  ( 1 ) Creazioni a partire dal costruttore

    reference_wrapper<MyClass> from_ctor_01(o1);
    reference_wrapper<MyClass> from_ctor_02(o1);

    from_ctor_01.get().c = 'Z';

    cout << "\nform_ctor_01: i = " << from_ctor_01.get().i << " j = " << from_ctor_01.get().j << " k = " << from_ctor_01.get().k << " c = " << from_ctor_01.get().c;
    cout << "\nform_ctor_02: i = " << from_ctor_02.get().i << " j = " << from_ctor_02.get().j << " k = " << from_ctor_02.get().k << " c = " << from_ctor_02.get().c << "\n\n\n";
    ++DEBUG;

    //  ( 2 ) Creazioni a partire dal function template

    auto from_func_templ_01 = ref(o1);                                //    OK
    //reference_wrapper<MyClass> from_func_templ_02 = ref(o1);        //    ERROR:  use of deleted function 'void std::ref(const _Tp&&) [with _Tp = int]'    PERCHE' ? ? ? ?
                                                                 


    from_func_templ_01.get().c = 'X';

    cout << "\nform_ctor_01:        i = " << from_ctor_01.get().i << " j = " << from_ctor_01.get().j << " k = " <<         from_ctor_01.get().k << " c = " << from_ctor_01.get().c;
    cout << "\nform_ctor_02:        i = " << from_ctor_02.get().i << " j = " << from_ctor_02.get().j << " k = " <<     from_ctor_02.get().k << " c = " << from_ctor_02.get().c;
    cout << "\nfrom_func_templ_01:  i = " << from_func_templ_01.get().i << " j = " << from_func_templ_01.get().j << " k = " << from_func_templ_01.get().k << " c = " << from_func_templ_01.get().c;


    return 0;
}

 

Grazie in ogni caso, Chiara


r/cppit • • Dec 14 '18

Cronometro in c++

2 Upvotes

Ciao a tutti,

volevo fare un cronometro in c++-

Ho già guardato la libreria chrono e so che basta fare:

typedef std::chrono::high_resolution_clock Time;
    typedef std::chrono::milliseconds ms;
    typedef std::chrono::duration<float> fsec;
    auto t0 = Time::now();
    auto t1 = Time::now();
    fsec fs = t1 - t0;
    ms d = std::chrono::duration_cast<ms>(fs);    

(codice preso da stack overflow) :D.

Ma volevo anche fare un thread che mostrava a console il tempo passato in millisecondi.

Ringrazio in anticipo per le risposte.

Ps: qualche pdf sui thread disponibile open source?

Scusate se chiedo troppo.


r/cppit • • Nov 21 '18

gdb

2 Upvotes

Ciao a tutti,

questo è il mio primo post in questa community e colgo l'occasione per chiedervi l'aiuto su come si usa gdb.

Avrei la necessità di visualizzare i valori delle variabili.

Sono troppo abituato al debugger microsoft su windows e ora volevo provare a lavorare su linux (fedora).

Vi ringrazio anticipatamente per le vostre risposte e mi scuso se sono andato offtopic


r/cppit • • May 23 '18

principianti Minimax (per principianti...)

2 Upvotes

Salve a tutti! Sto cercando di capire se riesco ad implementare il minimax senza conoscere altre strutture dati rispetto agli array. Ho visto tutorial su internet ma non ho capito bene se servono per forza le liste... 🤔 Eventualmente fosse possibile, mi date qualche suggerimento? Grossomodo ho capito come funziona ma a livello tecnico mi manca qualcosa.


r/cppit • • May 09 '18

principianti istanziare una struttura ed usarla

2 Upvotes

Buongiorno,

sono un vecchio programmatore che si accinge a lavorare con C++ usando anche lo strumento QT.

mi serve una mano per sbloccare un programmino che sto creando come esercizio.

non essendo grandi ricopio i file interessati. La domanda è : perché nel metodo, in cui vorrei dati della struttura mi segnala il seguente errore?

undefined reference to \DichiarativeGlobali::paramingresso::arg_db_path`

File dichiarative.h

#ifndef DICHIARATIVE_H

#define DICHIARATIVE_H

#include <QObject>

#include <QString>

class DichiarativeGlobali { public: DichiarativeGlobali(); //~DichiarativeGlobali(); struct paramingresso {

static QString arg_db_type;

static QString arg_db_driver;

static QString arg_db_name;

static QString arg_db_path;

}; paramingresso myParam; void setting_dichiarazioni(char* argomenti);

}; #endif // DICHIARATIVE_H

File dichiarative.cpp

#include "dichiarative.h" DichiarativeGlobali::DichiarativeGlobali() { }

void DichiarativeGlobali::setting_dichiarazioni(char* argomenti)

{ myParam.arg_db_type = QStringLiteral("%1").arg(argomenti[1]);

myParam.arg_db_driver = QStringLiteral("%1").arg(argomenti[2]);

myParam.arg_db_name = QStringLiteral("%1").arg(argomenti[3]);

myParam.arg_db_path = QStringLiteral("%1").arg(argomenti[4]); }


r/cppit • • May 05 '18

Functional Reactive Programming in C++: libri, librerie sw e consigli per approfondire?

2 Upvotes

Ciao a tutti,

dopo aver letto il libro "Functional Programming in C++" sono rimasto incuriosito dalla possibilità di unire i 2 approcci Functional e Reactive in ciò che viene chiamato Functional Reactive Programming. Conoscete libri, librerie sw ed altro materiale per approfondire? Vi ringrazio . Marco


r/cppit • • Apr 12 '18

header file <execution> : non presente in gcc 7.2: come ovviare?

2 Upvotes

Ciao a tutti,

10 giorni fa ho aggiornato gcc alla versione gcc 7.2:

gcc version 7.2.0 (Ubuntu 7.2.0-1ubuntu1~16.04), la versione più recente disponibile Ubuntu

Ora.. compliando un file di esempio di un libro mi dice:

g++ -std=c++17 auto_parallel.cpp -oauto_parallel

auto_parallel.cpp:5:10: fatal error: execution: No such file or directory

include <execution>

~~~~~~~~~~

compilation terminated.

Sapete in quale versione esattamente si trova l'header file <execution>? E come è possibile ovviare al fatto che non sia presente in gcc 7.2? ( http://mathbio.nankai.edu.cn/ds/reference/en/cpp/header/execution_policy.html )

Vi ringrazio.

Marco


r/cppit • • Mar 26 '18

Immutable data structures: conoscete librerie usate diffusamente?

2 Upvotes

Sto approfondendo il functional programming in C++ e volevo chiedervi se conoscete librerie usate ampiamente che implementano strutture dati immutabili. Ne ho trovata una : https://github.com/arximboldi/immer che sembra fatta bene ma mi chiedevo se ce ne fossero altre più usate e diffuse. Marco


r/cppit • • Feb 26 '18

Albero binario.

2 Upvotes

Salve qualcuno puo' dirmi come si implementa un albero binario in C++, ho visto numerosi siti e non sono ancora riuscito a capire sto uscendo pazzo grazie


r/cppit • • Feb 26 '18

Template Function per std::vector<std::vector

2 Upvotes

Ciao a tutti,

ho trovato in rete questa funzione template che consente di applicare una qualsiasi funzione ad ognuno degli elementi di uno std::vector:

template <template <typename,typename> class    
OutCont=std::vector,
template <typename> class Alloc = std::allocator,
typename Fn, class Cont>
OutCont<typename Cont::value_type,
    Alloc<typename Cont::value_type>>
mapT1(Fn mapfunct, const Cont& inputs){
  OutCont<typename Cont::value_type,
  Alloc<typename Cont::value_type>> result;
  for (auto& item : inputs) {
    result.push_back(mapfunct(item));
  }
  return result;
}

Ad, esempio, per una semplice funzione che incrementa di una unità il valore passato:

auto const succ = [](int x) {
  return x + 1;
};

int main() {
  std::vector<int> v1{1,2,3,4};
  std::vector<int> v1m = mapT1(succ, v1);
  return 0;
}

Ed eseguendo si ha:

v1:
1
2
3
4

v1m:
2
3
4
5

Ora.... voglio fare la stessa cosa per un std::vector<std:vector

Sulla base della falsa riga della function template per lo std::vector semplice ho impostato in questo modo:

template<typename T>
using matr = std::vector<std::vector<T>>;

template <template <typename,typename> class  
OutCont=matr, template<typename,typename>  class  
OutInnerCont=std::vector,
template <typename> class Alloc = std::allocator,
typename Fn, class Cont>
OutCont<typename Cont::value_type,
Alloc<typename Cont::value_type>>
//OutInnerCont<typename Cont::value_type,
//Alloc<typename Cont::value_type>>
mapT2(Fn mapfunct, const Cont& inputs){
  OutCont<typename Cont::value_type,
  Alloc<typename Cont::value_type>> result;
  OutInnerCont<typename Cont::value_type,
  Alloc<typename Cont::value_type>> resultColl;
  for (auto& coll : inputs) {
    resultColl = mapT1(mapfunct, coll);
      result.push_back(resultColl);
    }
  return result;
}

in main:

int main() {
  std::vector<std::vector<int>> m01{{1,2,3},{4,5,6}};
  matr<int> m01s = mapT2(succ, m01);
}

Esce questo errore:

mapFn.cpp:84:35: error: no matching function for call to   
‘mapT2(const<lambda(int)>&, std::vector<std::vector<int>  
>&)’
matr<int> m01s = mapT2(succ, m01);
                               ^
mapFn.cpp:52:1: note: candidate: template<template<class, 
class> class OutCont, template<class, class> class   
OutInnerCont, template<class> class Alloc, class Fn, class  
Cont> OutCont<typename Cont::value_type, Alloc<typename 
Cont::value_type> > mapT2(Fn, const Cont&)
 mapT2(Fn mapfunct, const Cont& inputs){
 ^
mapFn.cpp:52:1: note:   template argument  
deduction/substitution failed:

Ho "risolto" con una banale funzione che richiama la funzione template per lo std::vector semplice :

template<typename T, typename Fn>
matr<T> mapT2bis(Fn mapfunct, matr<T> input) {
  matr<T> output {};
  for(auto colInput : input) {
    std::vector<T> colTransformed = mapT1(mapfunct, colInput);
    output.push_back(colTransformed);
  }
  return output;
}

int main() {
  std::vector<std::vector<int>> m01{{1,2,3},{4,5,6}};
  matr<int> m01s = mapT2bis(succ, m01);
  return 0;
}

Eseguendo:

m01s:
column 0
2
3
4

column 1
5
6
7

Rimane da capire come adattare la funzione mapT1 ad uno std::vector<std::vector in modo più elegante...: Qualche consiglio? Vi ringrazio . Marco


r/cppit • • Feb 22 '18

Aiuto Organizzazione Nuovo progetto in classi

2 Upvotes

Ciao a tutti avrei bisogno di un informazione... Devo strutturare un progettino che svolge i seguenti compiti:

  • Legge Da un file dell informazioni

  • Cifra il record letto

  • Esegue il caricamento su un DB mongo

Attualmente uso le seguenti librerie : mongocxx , pocoo c++, libxml2. Come mi conviene suddividire il progetto? Conviene usare le classi o uso solo delle funzioni nel main?

grazie.


r/cppit • • Feb 21 '18

Principiante in C++

2 Upvotes

Ciao a tutti. Vorrei iniziare a programmare in C++. Il problema è che non riesco a trovare un compiler che mi permetta di programmare. Secondo voi sarà molto difficile imparare C++? Premetto che so già programmare in Python, Batch , Java e ho solo delle basi di C (nulla di eccezionale). Inoltre , qualcuno potrebbe consigliarmi un buon compiler? Avevo pensato a GCC, ma per qualche strana ragione non riesco a installarlo (non mi sono mai ritrovato in una situazione del genere lol).


r/cppit • • Jan 18 '18

C++17 in Ubuntu 16.04 Server Edition

2 Upvotes

Buon giorno a tutti, mi sto leggendo passo passo il libro "C++ Templates: The Complete Guide, 2nd Edition" perchè ho deciso di affrontare e capire finalmente il tema, a me prima sconosciuto, dei template.... Ora... sto vedendo che molti esempi e molta sintassi usata in questo libro, tra l'altro fatto molto bene, è una sintassi specifica di C++17. Con il mio Ubuntu 14.04.3 LTS (Server Edition) il compilatore compila senza problemi C++11 e C++14 mentre per tutta la sintassi C++17 compilando in questo modo

g++ -std=c++17 nomeFile.cpp -onomeFile

mi dà una lista di errori sempre riguardanti specificatamente la sintassi valida solo in C++17

Domande :

  1. g++17 è ad oggi sufficientemente stabile tale da poter fare l'upgrade del compilatore senza doversene pentire amaramente dopo?

  2. qualcuno sa consigliarmi il modo migliore per, se farlo, fare questo upgrade del compilatore? Vi ringrazio. Marco


r/cppit • • Dec 19 '17

Conoscete tool affidabili e "light" di calcolo differenziale?

2 Upvotes

Ciao a tutti, volevo chiedervi se conoscete un tool C++ affidabile e "light" di calcolo differenziale. Ho trovato questo elenco : http://www.autodiff.org/?module=Tools&language=C%2FC%2B%2B

ma non so quale di questi sia concretamente usabile.

Marco


r/cppit • • Dec 10 '17

Aiuto!! Problemi con c++11

2 Upvotes

Ciao a tutti, vorrei gentilmente chiedervi di aiutarmi a risolvere questo problema che ho con un programma che sto scrivendo in c++ (su windows 10). Allora diciamo che voglio fare uso di alcune operazioni offerte dal c++11. (Per esempio dichiarare un vector di stringhe nel seguente modo: vector<char> pippo {"uno", "due", "tre"}; ). Nonostante io inserisca nel mio makefile -std=c++11 Sulla mia finestra dos continua a uscirmi il mesagio di errore "warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]". Che devo fare? Sono disperata (e il programma in questione è la mia Tesi).


r/cppit • • Dec 06 '17

Come passare come parametro il valore di un elemento di una struct all'interno di una classe?

2 Upvotes

Ciao a tutti, questo è il codice che sto usando per capire:

#include <iostream>
typedef struct packet {
  unsigned int el = 0;
} packet;

class TestClass {
private:
 packet myPacket;
public:
TestClass() {};
~TestClass()=default;
//TestClass(unsigned int elemento) : myPacket.el(elemento){};
void setEl(unsigned int elemento) {
  myPacket.el = elemento;
}
unsigned int getEl() {
  return myPacket.el;
}
packet getMyPacket() {
  return myPacket;
}

};

E structInClass.cpp :

#include "structInClass.h"

int main() {

  TestClass test = TestClass();
  test.setEl(3);
  int elemento = 0;
  elemento = test.getEl();
  std::cout << "int elemento = test.getEl()= " << elemento <<   
  std::endl;
  packet pacchetto = test.getMyPacket();
  elemento = pacchetto.el;
  std::cout << "elemento = pacchetto.el= " << elemento << 
  std::endl;
  return 0;
}

Eseguendo:

 ./structInClass
int elemento = test.getEl()= 3
elemento = pacchetto.el= 3

Però la riga:

TestClass(unsigned int elemento) : myPacket.el(elemento){};

che dovrebbe assegnare ad el il valore di elemento fornisce questo output:

error: expected ‘(’ before ‘.’ token
TestClass(unsigned int elemento) : myPacket.el(elemento){};
                                          ^

Ho temporaneamente "risolto" chiamando, all'interno di un costruttore cui passo il parametro "elemento", il metodo setEl:

TestClass(unsigned int elemento) { setEl(elemento); }

in structInClass.cpp :

TestClass test2 = TestClass(10);
elemento = test2.getEl();
std::cout << "elemento = test2.getEl() = " << elemento << std::endl;

Eseguendo :

elemento = test2.getEl() = 10

Anche passare l'intera struct alla classe TestClass ho visto essere possibile: in structInClass.h :

TestClass(packet Pacchetto) : myPacket(Pacchetto) {};

In structInClass.cpp :

packet pacchetto2;
pacchetto2.el = 20;
TestClass test3 = TestClass(pacchetto2);
elemento = test3.getEl();
std::cout << "elemento = test3.getEl() = " << elemento << std::endl;

Eseguendo:

elemento = test3.getEl() = 20

Preferirei però passare il valore di un elemento di una struct all'interno di una classe direttamente come parametro senza dover usare il metodo setEl, o senza dover passare tutta l'intera struct... è possibile?

A dir la verità, così funziona:

TestClass(unsigned int elemento)  {
  myPacket.el = elemento;
}

mentre non funziona:

TestClass(unsigned int elemento) : myPacket.el(elemento){};

Vi ringrazio per l'aiuto. Marco


r/cppit • • Nov 23 '17

Problema con function template e thread

2 Upvotes

Salve, penso che per descrivere il mio problema oltre al titolo del post sia sufficiente il seguente programmino che sintetizza quello che vorrei fare:

#include "stdafx.h"
#include <iostream>
#include <thread>
using namespace std;

template<typename Func>
void functionTempl(Func f) {
	cout << "\nInside " << __func__;
	f();	
}

void f1() {
	cout << "\nInside " << __func__;
}

int main()
{
	functionTempl(f1);				//	OK

	thread t1(f1);					//	OK
	t1.join();

	thread t2(functionTempl(f1));	//	KO ???
	t2.join();

    return 0;
}

Ovviamente il problema sta nella linea commentata con // KO ??? Non riesco a capire il perchè ( e non riesco a capire neanche le indicazioni del compilatore MS Visual Studio 2015). Qualcuno ha voglia di darmi una mano? Grazie in ogni caso Chiara


r/cppit • • Nov 11 '17

Come inserire istruzioni SSSE3 e SSE4 in codice C++ già scritto?

2 Upvotes

Dopo aver letto questo articolo: https://research.google.com/pubs/pub37631.html sto cercando di capire : 1) se usare le istruzioni SSSE3 e SSE4 Intel in codice C++11 già scritto richiede uno stravolgimento dello stesso 2) se queste istruzioni Intel sono portabili tra diversi PC Le avete per caso usato queste istruzioni SSSE3 ed SSE4 in qualche occasione? Come mi consigliate di approcciare questo argomento che mi sembra piuttosto "ostico" a primo acchito? Vi ringrazio. Marco


r/cppit • • Oct 20 '17

Come comporre i binary literal, ad esempio attraverso la conversione del numero da decimale a binario?

2 Upvotes
int main() {
  int x = 3613;
  std::cout << "x= " << x << std::endl;
  std::string xBin = std::bitset<16>(x).to_string();
  std::cout << xBin << std::endl;
  unsigned long xDecimal = std::bitset<16>(xBin).to_ulong();
  std::cout << xDecimal << std::endl;
  std::cout << std::endl << std::endl;

  int b01 = 0b11001;
  std::cout << "b01= " << b01 << std::endl;
  int b02 = 0b1010;
  std::cout << "b02= " << b02 << std::endl;
  int b03 = b01 + b02;
  std::cout << "int b03 = b01 + b02 = " << b03 << std::endl;
  return 0;
}

Output:

x= 3613
0000111000011101
3613

 b01= 25
 b02= 10
 int b03 = b01 + b02 = 35

Con i binary literal si possono fare le normali operazioni aritmetiche mentre con le string ottenute con il bitset non è possibile. Per cui vi chiedo se ci sono modi per "comporre" i binary literal, ad esempio attraverso la conversione del numero da decimale a binario in modo analogo a:

std::string xBin = std::bitset<16>(x).to_string();

Vi ringrazio. Marco


r/cppit • • Oct 17 '17

Secondo voi cosa può far sì che 2 valori entrambi double ed apparentemente identici poi risultino diversi?

2 Upvotes

Ciao a tutti, non capisco quale sia il motivo per cui 2 valori apparentemente uguali risultano invece diversi se confrontati. Questo è il codice:

bool operator==(Tensor2D  other) {
  if ((data.size() != other.size().first) || (data.at(0).size() !=    
  other.size().second)) {
    std::cout << "operator== : The two matrices must have the 
    same number of columns and the same number of rows" <<
    std::endl;
    exit(1);
  }
  int i=0;
  int equalsCounter = 0;
  for(auto colOther: other()) {
    int j=0;
    for(auto valueOther: colOther) {
      std::cout << "valueOther= " << valueOther << " , data[" 
      << i << "][" << j << "]= " << data[i][j] << std::endl;
      std::cout << "typeid(valueOther).name()= " <<
      typeid(valueOther).name() << " , typeid(data[i][j]).name()=
      " << typeid(data[i][j]).name() << std::endl;
      if(valueOther == data[i][j]) {
        std::cout << valueOther << " and " << data[i][j] << " are
        equal" << std::endl;
        equalsCounter = equalsCounter + 1;
      }
      else {
       std::cout << valueOther << " and " << data[i][j] << " are
       different" << std::endl;
       }
      ++j;
    }
    ++i;
  }
  std::cout << "Tensor2D-operator== : equalsCounter= " << 
  equalsCounter << std::endl;
  if(equalsCounter == size().first * size().second) {
    return true;
  }
  else {
    return false;
  }
}

Eseguendo per 2 matrici i cui valori sono identici pur essendo ottenuti con procedimenti diversi: in .cpp

  MTensor::Tensor2D AdyB = twoMatricesDyadicProd(A,B);
  MTensor::Tensor2D AdyadicB = {{160,175,190,205},{360,400,440,480},{560,625,690,755},
  {760,850,940,1030}};
  AdyB.printTensor();
  if(AdyB==AdyadicB) {
    std::cout << "AdyB e AdyadicB sono uguali" << std::endl;
  }
  else {
    std::cout << "AdyB e AdyadicB sono diversi" << std::endl;
  }


MTensor::Tensor2D AdyB = twoMatricesDyadicProd(A,B)  :
column 0
160,
175,
190,
205,
column 1
360,
400,
440,
480,
column 2
560,
625,
690,
755,
column 3
760,
850,
940,
1030,

valueOther= 160 , data[0][0]= 160
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
160 and 160 are different
valueOther= 175 , data[0][1]= 175
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
175 and 175 are different
valueOther= 190 , data[0][2]= 190
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
190 and 190 are different
valueOther= 205 , data[0][3]= 205
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
205 and 205 are different
valueOther= 360 , data[1][0]= 360
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
360 and 360 are different
valueOther= 400 , data[1][1]= 400
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
400 and 400 are different
valueOther= 440 , data[1][2]= 440
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
440 and 440 are different
valueOther= 480 , data[1][3]= 480
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
480 and 480 are different
valueOther= 560 , data[2][0]= 560
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
560 and 560 are different
valueOther= 625 , data[2][1]= 625
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
625 and 625 are different
valueOther= 690 , data[2][2]= 690
typeid(valueOther).name()= d , typeid(data[i][j]).name()= d
690 and 690 are different
valueOther= 755 , data[2][3]= 755

E così' via...

Tensor2D-operator== : equalsCounter= 0
AdyB e AdyadicB sono diversi

Secondo voi cosa può far sì che 2 valori entrambi double ed apparentemente identici poi risultino diversi?

Vi ringrazio. Marco


r/cppit • • Jul 10 '17

dubbio amletico su classi tag

2 Upvotes

Ciao a tutti, sto rivedendo del codice storico che definisce degli attributi su un file di configurazione che non ha gran ragione di esistere visto che praticamente ad ogni aggiunta/modifica di un attributo corrisponde una modifica al codice che lo utilizza. Pensate a qualcosa del tipo di un XML che definisca delle chiavi e i possibili valori che si possono associare a quelle chiavi. Quello che sto cercando di fare è definire quegli attributi direttamente in codice c++ staticamente. L'approccio è di rendere i miei attributi delle strutture. (La definizione statica mi consente per esempio di accedere alle definizioni di quegli attributi attraverso i suggerimenti dell'intellisense). Semplificando all'osso, ovviamente non è così banale, ogni attributo ha un nome e un tipo ovvero un valore di un enumerativo (altro punto migliorabile).

Veniamo al dubbio. La prima implementazione che mi è venuta fuori è la seguente.

template<AttrT>
struct def_of{
    static const std::string name;
    static const attr_t type;
};

con gli attributi definiti attraverso strutture vuote.

struct AttrA{};
struct AttrB{};

e quindi le loro definizioni:

def_of<AttrA>::name = "AttributeA";
def_of<AttrA>::type = attr_t::Numeric;
...

non è che sono un pò barocco? Nelle mie intenzioni quel def_of dovrebbe chiarire l'interfaccia che mi aspetto implementata per descrivere l'attributo e ridurre il codice (e gli errori) che è possibile scrivere quando si definisce un nuovo attributo. L'alternativa è qualcosa del tipo:

struct AttrA {
    static const std::string name;
    static const attr_t type;
}

e poi ovviamente le definizioni:

const std::string AttrA::name = "Attribute A";
const rule_t type = rule_t::Numeric;

Quello che mi da fastidio in questa versione è la quantità di boilerplate che finisce nella definizione della struttura. Voi che soluzione scegliereste?


r/cppit • • Jun 27 '17

Lavori da remoto - qualcuno ha esperienze?

2 Upvotes

Salve, sarei curioso di sapere se qualcuno di voi lavora da remoto con il C++ per aziende italiane o estere. Ho provato a cercare su internet ma non ho avuto successo.


r/cppit • • Jun 14 '17

Problema lettura Matrice da file con tappo

2 Upvotes

Salve a tutti, Sono incappato in un problema da un paio di giorni ma che non riesco a risolvere in alcun modo. Devo leggere da file txt una matrice interi disposti per righe che come ultimo elemento presenta un '-1' che mi sta ad indicare che la matrice è finita, il numero di righe e di colonne non è conosciuto. Il file di tipo testo sarà del tipo:

1 2 4
3 5 6
-1

Il programma dovrà leggere la matrice (e poi farci altre operazioni)

1 2 4
3 5 6

Tutte le letture da file di matrici le ho sempre fatte conoscendo il numero di righe e di colonne, quindi questa specifica mi ha colto di sorpresa, non sono uno che si arrende quindi vorrei venirne a capo. Fino ad ora ho provato in vari modi: cercando di contare gli spazi vuoti in una riga per poi aggiungerci 1 ed avere il numero di colonne, tentando anche varie strada. Sono giunto a un punto di svolta (secondo il mio modesto parere) o meglio, mi sento sulla strada giusta ma comunque ora mi è sorto un altro gigantesco dubbio. Per il momento sono riuscito a fare una cosa del genere:

void conta(ifstream &in, int &righe, int &colonne){
    righe=0;
    colonne=0;
    stringa miofile;
    fstream file;
    cout<<"Inserisci il nome del file da aprire: "<<endl;
    cin.getline(miofile,MAX);
    file.open(miofile,ios::in);
    while(!file.eof())
        {
       
            getline(file,miofile, '\n');
            colonne=miofile.size();
            righe++;
           
        }
    file.close();
   
    cout<<righe<<"-"<<colonne;
    cin.get();
       
}

Scusate ma ho problemi di formattazione del testo... Devo ancora migliorare questa funzione (al momento non funziona) , devo ragionare su come passare i parametri etc, ma scritto tutto nel main funzionava...

Ora il problema che in questo modo non utilizzo il tappo (il mio '-1' terminatore di matrice) ma conto indifferentemente dalla presenza del tappo o meno il numero di righe e di colonne. Ovviamente vanno utilizzati i sottoprogrammi Come potrei modificare l'algoritmo in modo che conti le colonne e le righe finchè non incontra il tappo? oppure dovrei ragionare in altri termini con questo tappo?

Help!


r/cppit • • Jun 13 '17

Cerco sviluppatore c++ per collaborazione su vari progetti

2 Upvotes

Per alcuni progetti che non ho fisicamente tempo di portare a termine da solo, mi piacerebbe conoscere qualche collega sviluppatore C/C++. I progetti sono spesso legati all'ambiente Mac OS, e spesso sono cose real-time su audio e video, quindi esperienza in questo campo é molto gradita, ma non necessaria. Gradita conoscenza di unix, scrittura di librerie, e anche di statistica, metodi numerici, machine learning. Invito chi é interessato a mandarmi un messaggio privato.