Обычно, когда вам нужен параметр IN, передайте встроенные типы по значению и другие типы по ссылке на const
, т.е.
template< size_t size >
void function( Container<size> const& input,size_t Size )
{
//all instances do exactly same thing and with regard to Size that determines the size of object
}
При таком определении есть вероятность, что компилятор + компоновщик оптимизирует все так, что будет только одна версия машинного кода function
.
Я был немного удивлен, когда впервые проверил простую небольшую примерную программу, которая, выражая ее с помощью полиморфизма времени компиляции (шаблонов), производила меньший и более эффективный код, чем выражение с полиморфизмом времени выполнения!
Попробуйте сами, и если вы удивитесь так же, как я когда-то был, тогда Хорошо! В противном случае, есть вероятность, что не будет существенной разницы. Но в некоторых случаях вы можете найти то, что в прежние времена называлось «раздуванием кода шаблона», а затем пришло время игнорировать его или измерить, достаточно ли это важно для выполнения работы по переводу во время полиморфизма во время выполнения.
Теперь на ваш вопрос,
"Мне любопытно иметь одну функцию
который принимает переменный размер
параметр, как указано выше, это не
разрешено C ++ это что-то невозможное
вообще реализовать и сгенерировать
сборка, или как-то приводит к
неэффективная реализация с точки зрения
скорость / память? "
Нет, невозможно преобразовать полиморфизм во время компиляции в эффективный полиморфизм во время выполнения или просто без полиморфизма . Тем более, что вы уже передаете размер во время выполнения (который, вероятно, гарантированно меньше фиксированного размера).
Безопасный способ - использовать std::string
из стандартной библиотеки C ++, заголовок <string>
. Это включает в себя динамическое распределение где-то во внутренних органах std::string
, которое выполняется автоматически для вас, но влияет на эффективность. Но ваш код, содержащий char[size] characters
, не был допустимым C ++, и это указывает на уровень начинающего, поэтому есть вероятность, что ваш дизайн не был выбран по какой-либо веской причине - следовательно, выполните:
class Container
{
public:
std::string characters;
};
void function( Container const& input )
{
// whatever, using e.g. input.characters.length()
}
Приветствия и hth.,