Re[2]: Количество аргументов функции как параметр шаблона
От: Erop Россия  
Дата: 13.04.17 17:17
Оценка:
Здравствуйте, niXman, Вы писали:

X>enable_if, имхо, самый разумный вариант...

X>http://coliru.stacked-crooked.com/a/a76bf9f72a67b833

IMHO, тут самое интересное, что писать внутри {} этого метода...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Количество аргументов функции как параметр шаблона
От: uzhas Ниоткуда  
Дата: 13.04.17 17:26
Оценка: 15 (1) +1
Здравствуйте, Erop, Вы писали:

E>IMHO, тут самое интересное, что писать внутри {} этого метода...


можно так: http://ideone.com/Wa3tAS
Re[3]: Количество аргументов функции как параметр шаблона
От: niXman Ниоткуда https://github.com/niXman
Дата: 13.04.17 17:30
Оценка:
Здравствуйте, Erop, Вы писали:

E>IMHO, тут самое интересное, что писать внутри {} этого метода...

ну... элементы в вектор вставлять?
http://coliru.stacked-crooked.com/a/85ac6807a2bd8bfe
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Количество аргументов функции как параметр шаблона
От: Кодт Россия  
Дата: 13.04.17 18:12
Оценка:
Здравствуйте, Went, Вы писали:

W>Что я должен написать вместо троеточия, чтобы количество аргументов, принимаемое функцией set было равно аргументу шаблона S? Я, конечно, могу написать там parameter pack и проверить sizeof... через static_assert, но хочется чтобы красиво, и неверных перегрузок просто не существовало. Ну и грядок enable_if тоже не хочется.


Без sfinae, зато с наследованием
http://ideone.com/dPmiqU
#include <iostream>
using namespace std;

// тип исключительно для сопоставления - кортеж параметров шаблона
template<class... Ts> struct mpl_tuple {};

// утилита для получения кортежа из N повторящихся типов
template<class T, int N, class TUPLE> struct tuple_maker;
template<class T, class... Ts> struct tuple_maker<T,0,mpl_tuple<Ts...>> {
    using type = mpl_tuple<Ts...>;
};
template<class T, int N, class... Ts> struct tuple_maker<T,N,mpl_tuple<Ts...>>
    : tuple_maker<T,N-1,mpl_tuple<T,Ts...>> {};

template<class T, int N> using make_tuple = typename tuple_maker<T,N,mpl_tuple<>>::type;

// основа для вектора, реализует функцию с нужной сигнатурой
template<class TUPLE> struct VectorBase;
template<class... Ts> struct VectorBase<mpl_tuple<Ts...>> {
    void set(Ts... ts) {
        cout << __PRETTY_FUNCTION__ << endl;
    }
};

// собственно, вектор
template<class T, int N> struct Vector : VectorBase<make_tuple<T,N>> {
    // все остальные функции пусть будут здесь
};

int main() {
    Vector<int,5> v5;
    v5.set(1,2,3,4,5);
}

Но для практического использования придётся как-то налаживать связи между базой и наследником — это будет что-то типа CRTP, и там живут львы.
Перекуём баги на фичи!
Re[4]: Количество аргументов функции как параметр шаблона
От: Erop Россия  
Дата: 13.04.17 18:21
Оценка:
Здравствуйте, niXman, Вы писали:

E>>IMHO, тут самое интересное, что писать внутри {} этого метода...

X>ну... элементы в вектор вставлять?
X>http://coliru.stacked-crooked.com/a/85ac6807a2bd8bfe

Для этого нет смысла огород городить.
Интересно, если m_data опредеён, как T m_data[size] конечно же.

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