Articles of sfinae

Como verificar se o operador == existe?

Eu estou tentando criar um exemplo, que iria verificar a existência do operator== (membro ou function não-membro). Para verificar se uma class tem um operator== membro operator== é fácil, mas como verificar se ele tem um operator== não-membro operator== ? Isto é o que tenho até agora: #include struct A { int a; #if 0 […]

O que exatamente é o “contexto imediato” mencionado no Padrão C ++ 11 para o qual a SFINAE se aplica?

O parágrafo 14.8.2 / 8 da norma C ++ 11 especifica as condições sob as quais uma falha de substituição deve ou não resultar em um erro de compilation “difícil” (fazendo com que a compilation falhe) ou em um erro “soft” que apenas faça com que o compilador descarte um modelo de um conjunto de […]

Metaprogramação: falha na definição da function define uma function separada

Nesta resposta eu defino um modelo baseado na propriedade is_arithmetic do tipo: template enable_if_t<is_arithmetic::value, string> stringify(T t){ return to_string(t); } template enable_if_t<!is_arithmetic::value, string> stringify(T t){ return static_cast(ostringstream() << t).str(); } O dyp sugere que, em vez da propriedade is_arithmetic do tipo, que to_string seja definido para o tipo seja o critério de seleção do modelo. […]

SFINAE para verificar funções membro herdadas

Usando o SFINAE, posso detectar se uma determinada class possui uma determinada function de membro. Mas e se eu quiser testar as funções de membro herdadas? O seguinte não funciona em VC8 e GCC4 (isto é, detecta que A tem uma function de membro foo() , mas não que B herda uma): #include template struct […]

Por que expressões constantes têm uma exclusão por comportamento indefinido?

Eu estava pesquisando o que é permitido em uma expressão constante * , que é abordada na seção 5.19 Expressões constantes, parágrafo 2 do padrão C ++, que diz: Uma expressão condicional é uma expressão constante central a menos que envolva um dos seguintes itens como uma subexpressão potencialmente avaliada (3.2), mas subexpressões de operações […]

Como detectar se existe uma variável de membro específica na class?

Para criar a function de modelo de algoritmo, preciso saber se x ou X (e y ou Y) na class que é um argumento de modelo. Pode ser útil ao usar minha function para CPFC class MFC ou GDI + PointF class ou alguns outros. Todos eles usam diferentes x neles. Minha solução pode ser […]

SFINAE trabalhando no tipo de retorno, mas não como parâmetro de modelo

Eu já usei o idioma SFINAE algumas vezes e me acostumei a colocar meus std::enable_if em parâmetros de template ao invés de em tipos de retorno. No entanto, deparei-me com um caso trivial em que não funcionou e não sei porquê. Primeiro de tudo, aqui é meu principal: int main() { foo(5); foo(3.4); } Aqui […]

Como funciona o `void_t`

Eu assisti a palestra de Walter Brown na Cppcon14 sobre programação de modelos modernos ( Parte I , Parte II ) onde ele apresentou sua técnica void_t SFINAE. Exemplo: Dado um modelo de variável simples que avalia como void se todos os argumentos de modelo são bem formados: template using void_t = void; e o […]

Verifique se uma class tem uma function de membro de uma determinada assinatura

Eu estou pedindo um truque de modelo para detectar se uma class tem uma function de membro específica de uma determinada assinatura. O problema é semelhante ao citado aqui http://www.gotw.ca/gotw/071.htm mas não é o mesmo: no item do livro de Sutter, ele respondeu à pergunta que uma class C DEVE FORNECER uma function-membro com uma […]

Como posso adicionar reflection a um aplicativo C ++?

Eu gostaria de ser capaz de introspect uma class C ++ para o seu nome, conteúdo (ou seja, membros e seus tipos) etc. Eu estou falando C ++ nativo aqui, não gerenciado C + +, que tem reflection. Eu percebo que o C ++ fornece algumas informações limitadas usando o RTTI. Quais bibliotecas adicionais (ou […]