В настоящее время я создаю код, который нуждается в конкретной реализации для любого типа с шаблонами, поэтому я пытаюсь закодировать черту типа, которая верна для любого шаблонного типа.Типовой признак для любых шаблонных типов с постоянными значениями
Прямо сейчас, у меня есть это:
template<class T>
struct TIsTemplated { enum { Value = 0 }; };
template<template<typename, typename...> class T, typename First, typename... Values>
struct TIsTemplated<T<First, Values...>> { enum { Value = 1 }; };
Это хорошо работает для шаблонных типов, как
template<typename T>
struct X { };
Это терпит неудачу, однако, как только есть тип, который имеет постоянные значения:
template<typename T, int i = 10>
struct Y {};
Я узнал, что могу сделать такой тип:
template<int A, template<typename, int> class T, typename First>
struct TIsTemplated<T<First,A>> { enum { Value = 1 }; };
Однако это работает только в том случае, если я знаю, что у меня будет тип, который принимает int
. Я попытался обобщить это:
template<typename C>
template<C A, template<typename, C> class T, typename First>
struct TIsTemplated<T<First,A>> { enum { Value = 1 }; };
Но даже если это компилирует правильно, TIsTemplated
еще ложна для типа Y
. Есть ли способ достичь этого, не зная постоянный тип?
Можете ли вы дать контекст Asto, почему вы думаете, что вам нужно сделать это? Это похоже на высказывание «независимо от его текущих свойств, мне нужно идентифицировать все кирпичи, произведенные в южной половине их соответствующего состояния». – Yakk
Я создаю некоторые привязки из C++ на другой язык, и, хотя большинство типов могут использовать обобщенную реализацию, шаблонные типы должны иметь реализацию для каждого типа.Мне нужно как-то найти способ сказать компилятору C++ не использовать реализацию по умолчанию в этих случаях. Для контекста, проект https://github.com/proletariatgames/unreal.hx, и пока шаблоны работают в настоящее время, я пересматриваю, как они обрабатываются, поэтому мы можем генерировать меньше мусора кода клея – Waneck
Зачем ему нужна реализация для Каждый тип? Если вы привязываете шаблон, это одно, но если вы привязываете тип, сгенерированный шаблоном, почему это подразумевает привязку каждого типа, который может быть сгенерирован указанным шаблоном? Тип, сгенерированный шаблоном, является деталью реализации. Во-вторых, существует ли конечный список таких шаблонов, которые нужно обернуть? Вы можете относительно легко обернуть данный шаблон (или шаблон шаблона) с помощью параметра hedroginous template «виды» в один, который принимает только типы, а затем решает проблему шаблона только для типа. – Yakk