Я нахожусь в проекте, где мне нужно использовать ссылку на постоянный шаблонный объект как параметр шаблона другого объекта.Нельзя использовать ссылку на класс как параметр шаблона непигового типа
Проще говоря, я хотел бы сделать это:
template<typename T>
class A {...}
template<typename T, A<T>& a>
class B {...}
int main(){
const A<int> a;
B<int, a> b;
Проблема, я не могу понять, как сделать это произойдет, и мне нужна ваша помощь.
На визуальной студии, приведенный выше код будет производить следующее сообщение об ошибке: «C2971: переменная с нестатической длительности хранения, не может быть использован в качестве не аргумент типа»
Если я пытаюсь использовать constexpr
вместо Const, со следующими изменениями:
constexpr A<int> &a = A<int>(3);
B<int,a> b;
Я получаю следующее сообщение об ошибке «C2131: выражение не определяется константой»
Ну я попробовать несколько вещей, которые я видел на других должностях, касающихся аналогичных вопросов но, к сожалению не нашел ничего, что могло бы решить мою проблему.
Я, безусловно, делаю что-то неправильно, но не могу понять, что.
Заранее благодарю вас за помощь!
EDIT: Я пробовал ответ, но, к сожалению, даже если сначала кажется, что это нормально, я получил эту ошибку при компиляции: C2970: выражение, связанное с объектами с внутренней связью, не может использоваться как аргумент non-type. Похоже, что я не могу использовать параметр шаблона в другом файле? (Я разделял все классы в разных hpp) Любые идеи?
решаемые: Для того, чтобы решить эту проблему, я использовал решение по настоящему Договору и (я предполагаю, потому что мой класс был в отдельном файле HPP) просто поместить ключевое слово extern
, прежде чем иметь:
extern const A<int> a;
int main(){ B<int, a> b; }
И это работает как шарм.
переферия [как инициализировать ссылку constexpr] (http://stackoverflow.com/q/28614591/1708801) –
Это ДАЕТ НИКАКИХ смысл. Параметр шаблона не может быть ссылкой. – HolyBlackCat
Andrew: к сожалению, навязывается проектом, поэтому он должен быть параметром шаблона – docky