2015-09-05 3 views
1

Можно ли использовать черты или другие методы, чтобы определить, были ли значения параметров функции (или метода) объявлены как const? Например, в приведенном ниже коде fn_params можно использовать для определения того, что 1-й параметр имеет тип const int *; однако второй параметр идентифицируется только как имеющий тип double.Показатель константы значений параметра функции?

float foo(const int *, const double) { return 7.6f; } 

template <typename T, typename ...Ts> 
struct fn_params<T(*)(Ts...)> { using type = std::tuple<Ts...>; }; 
+4

Параметры верхнего уровня 'const' игнорируются в виде функции. – chris

+0

Что такое прецедент для этого? Попытка 'if (! Is_const (x)) x = 42' не будет компилироваться, даже если' is_const' будет работать. –

+1

Эта черта будет выглядеть так: http://coliru.stacked-crooked.com/a/b1316c1ba5e284c4, если одиночный const на параметрах не будет проигнорирован. –

ответ

1

Нет, не существует, в основном потому, что нет способа определить, какие параметры может выполнять функция. Ваш запрос неоднозначен даже в простых случаях, таких как шаблоны, которые могут быть явно созданы с помощью типов const, даже если обычные правила дедукции сделают параметры неконстантными, не говоря уже о перегрузках и подобных вопросах.

Прежде чем вы сможете спросить, являются ли параметры const, вы должны знать, какие параметры есть, а это невозможно.

+0

Вы имеете в виду, что я должен знать, что такое * аргументы *? Я действительно знаю аргументы, но это тоже не помогает. Спасибо, в любом случае. – user2023370

+0

Нет, я имею в виду параметры. – Puppy

+0

Я знаю параметры. Могу ли я спросить, являются ли они сейчас? – user2023370