Articles of sfinae

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 […]

É possível escrever um modelo para verificar a existência de uma function?

É possível escrever um modelo que altera o comportamento dependendo se uma determinada function de membro é definida em uma class? Aqui está um exemplo simples do que eu gostaria de escrever: template std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return “toString not defined”; } Então, se a class T tem toString() definido, […]