dd da Ответов: 3

Как написать функцию в C++, которая анализирует сигнатуру метода и возвращает эквивалентную отображаемую версию.


The test method names take the form:
public void testBirdCanFly()
public void testHumanCanEat()
When test running, the name is displayed the name in English, thus:
 "Bird Can Fly"
 "Human Can Eat" 


Что я уже пробовал:

Can any one suggest how this can be achieved in c++ 

Richard MacCutchan

Вы говорите о программе, которая будет читать исходный файл, содержащий эти функции, или о чем-то еще?

3 Ответов

Рейтинг:
2

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


Рейтинг:
2

Greg Utas

Если все что вам нужно это функция имя, стандарт C++ определяет func[^] как часть препроцессора. (Огорченный, func ему предшествуют и следуют два подчеркивания, но они интерпретируются как Markdown, когда я публикую это, и я не знаю, как их отобразить, потому что escape-символ не работает. Гррр!) В любом случае, func заменяется строкой C для имени текущей функции, которую можно использовать для построения std::string, которые затем можно разобрать.

C++ не поддерживает самоанализ, поэтому если вы действительно хотите проанализировать функцию подпись, который включает в себя его возвращаемый тип и аргументы, вам придется разобрать исходный код.


Рейтинг:
2

Rick York

Существует множество способов реализации такого рода вещей. Что заставляет вас думать, что они "анализируют сигнатуру метода"? Это может быть просто текстовая строка, установленная в этой функции. Вы также можете сделать что-то вроде этого :

#define FunctionMessage(a)  DisplayFuncMsg( a, __FUNCTION__, __FILE__, __LINE__ );

using PCSTR = const char *;

void DisplayFuncMsg( PCSTR text, PCSTR functionName, PCSTR fileName, int lineNumber )
{
    std::cout << "In function " << functionName
              << " at line " << lineNumber
              << " of " << fileName
              << std::endln;

    std::cout << "message : \"" << text << "\"" << std::endln;

    // one algorithm to parse function signature (functionName) :
    // remove the test prefix, if it exists
    // insert a space between words separate according to capitalized letters
}

void testDoSomethingHere()
{
    FunctionMessage( "some text message or another" );

    // do some other stuff here
}