У меня есть пример кода, который использует программирование шаблонов, он отлично работает на linux. Но когда я пытаюсь привести его к окнам с visual studio 12, я получил ошибку компиляции о выводе аргумента шаблона. Здесь доля кода, который вызывает ошибку:C++ - Не удалось вывести аргумент шаблона
template <int I>
class assign_array
{
public:
template <typename U, unsigned N>
static inline void run(improved_builtin<U, N>& a, const U b[N])
{
// do sth
}
};
template <template <int> class A, int I, int E>
struct loop_iter
{
template <typename U, typename V>
static inline void iter(U& a, V& b)
{
A<I>::run(a, b); // get error here
}
};
template <typename T, unsigned N>
improved_builtin<T, N>::improved_builtin(const T v[N])
{
loop_iter<assign_array, 0, N - 1>::iter(*this, v);
return;
}
ошибка происходит на :: Run (а, б) => assign_array < 0> :: Run (improved_builtin &, Const U [N]) ': не удалось вывести шаблонный аргумент для' const U [N] 'from' const int * '
И я заметил что-то странное в сообщении об ошибке, которое улучшено_builtin. В классе assign_array подпись первого аргумента должна быть улучшена_builtin. Я понятия не имею, почему США появляются там. Кто-нибудь знает об этой ошибке?
Можете ли вы опубликовать пример, который будет скомпилирован под Linux? – Petr
@Petr, код на самом деле тот же для linux и windows! Когда я вызывал функцию улучшенное_builtin (const T v [N]), он вызывает ошибку компиляции в окнах. Но в Linux он компилируется и работает нормально. – Bent
Используйте 'std :: array' вместо массива C. –
Johny