неоднозначная шаблонная странность

eval() не является необходимым. Это будет работать нормально:

var date = new Date(parseInt(jsonDate.substr(6)));

Функция substr() забирает часть /Date(, а функция parseInt() получает целое число и игнорирует )/ в конце. Полученное число передается в конструктор Date.


Я намеренно пропустил основание (2-й аргумент parseInt); см. мой комментарий ниже .

Кроме того, я полностью согласен с комментарием Рори : даты ISO-8601 предпочтительнее этого старого формата - поэтому этот формат обычно не следует использовать для новой разработки. См. Превосходную библиотеку Json.NET для отличной альтернативы, которая сериализует даты, используя формат ISO-8601.

Для дат JSON в формате ISO-8601 просто передайте строку в конструктор Date:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support

8
задан gpoo 22 February 2014 в 08:11
поделиться

3 ответа

Суть вашего вопроса в том, что у вас есть:

template <typename X, typename Y, typename Z>
struct Foo {};

template <typename X>
struct Foo<X, Base<X>, void> {};                   // #1

template <typename X, typename Y>
struct Foo<X, Y, typename whatever<Y>::type> {};   // #2

и вы пытаетесь сопоставить его с

Foo<int, Base<int>, void>

Очевидно, совпадают обе специализации (первая с X = int , второй с X = int, Y = Base ).

Согласно стандарту, раздел 14.5.4, если есть больше подходящих специализаций, частичный порядок (как определено в 14.5.5.2), из них создается и используется наиболее специализированный. Однако в вашем случае ни один из них не является более специализированным, чем другой. (Проще говоря, шаблон более специализирован, чем другой, если вы можете заменить каждый параметр типа последнего шаблона каким-либо типом и в результате получить подпись первого. Кроме того, если у вас есть something :: введите и замените Y на Base

12
ответ дан 5 December 2019 в 19:02
поделиться

Думаю, вам не хватает символа '<', шаблон должен выглядеть так:

template< typename T >
struct myStruct
{};

//OR

template< class T >
struct myStruct
{};
-2
ответ дан 5 December 2019 в 19:02
поделиться

разве вы не пропустили символ

<

?

-1
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: