Articles of Modelos

Strings C-Style como argumentos de modelo?

As seqüências de estilo C podem ser usadas como argumentos de modelo? Eu tentei: template struct X { const char *GetString() const { return str; } }; int main() { X x; cout<<x.GetString(); } E embora eu não tenha reclamações sobre a definição de class, a instanciação produz ‘X’ : invalid expression as a template […]

Pesquisas de nome em modelos C ++

Eu tenho algum código C ++ que não está mais compilando sem a opção -fmissmissive. É um código de propriedade que não posso compartilhar, mas acho que consegui extrair um caso de teste simples que demonstra o problema. Aqui está a saída do g ++ template_eg.cpp: In instantiation of ‘void Special_List::do_other_stuff(T*) [with T = int]’: […]

Por que a especialização parcial de um modelo de class aninhada é permitida, enquanto a completa não é?

template struct A { template struct B {};. template struct C {}; }; template template struct A::B {}; // error: enclosing class templates are not explicitly specialized template template struct A::C {}; // ok Então, por que a especialização explícita de uma class interna (ou function) aninhada não é permitida, se a class externa também […]

O que os compiladores fazem com ramificações em tempo de compilation?

EDIT: Eu tomei o “if / else” caso como um exemplo que às vezes pode ser resolvido em tempo de compilation (por exemplo, quando os valores estáticos estão envolvidos, cf ). Adaptar as respostas abaixo a outros tipos de ramificação estática (por exemplo, várias ramificações ou ramificações multicritério) deve ser simples. Note que a ramificação […]

Template typedefs – Qual é o seu trabalho?

C ++ 0x tem aliases de modelo (por vezes referido como modelo typedefs). Veja aqui Especificação atual do C ++ não. O que você gosta de usar como trabalho? Objetos de contêiner ou Macros? Você sente que vale a pena?

Pré-processador de C ++: evita a repetição de código da lista de variables ​​de membros

Eu tenho várias classs cada com diferentes variables ​​de membro que são inicializadas trivialmente em um construtor. Aqui está um exemplo: struct Person { Person(const char *name, int age) : name(name), age(age) { } private: const char *name; int age; }; Cada um tem uma function de print() associada. template void print(const Person &person) { […]

Template dentro de template: por que “` >> ‘deve ser `>>’ dentro de uma lista de argumentos de template aninhada”

Eu sei que quando estamos usando o template dentro de outro template, devemos escrevê-lo assim: vector<pair > s; e se nós escrevermos sem o espaço em branco: vector<pair> s; nós vamos receber um erro: `>> ‘deve ser`>>’ dentro de uma lista de argumentos de modelo nested Eu vejo que isso é compreensível, mas eu simplesmente […]

Modelos C ++, referência indefinida

Eu tenho uma function declarada assim: template T read(); e definido da seguinte forma: template T packetreader::read() { offset += sizeof(T); return *(T*)(buf+offset-sizeof(T)); } No entanto, quando tento usá-lo na minha function main (): packetreader reader; reader.read(); Eu recebo o seguinte erro do g + +: g++ -o main main.o packet.o main.o: In function `main’: […]

referências constantes com typedef e templates em c ++

Ouvi dizer que os objects temporários só podem ser atribuídos a referências constantes. Mas esse código dá erro #include template t const& check(){ return t(); //return a temporary object } int main(int argc, char** argv){ const int &resCheck = check(); /* fine */ typedef int& ref; const ref error = check(); / *error */ return […]

Existe um bug do compilador exposto pela minha implementação de um traço do tipo is_complete?

Eu escrevi este modelo de traço C ++ 11 para verificar se um tipo está completo: template using void_t = void; template struct is_complete : std::false_type {}; template struct is_complete<T, void_t> : std::true_type {}; e testou assim: struct Complete {}; int main() { std::cout << is_complete::value << is_complete::value << '\n'; } Eu esperava que o […]