Объявление “использования” может использоваться с шаблонами?

Как я понимаю, вы хотите убрать любое из «4 коротких имен», если они уже существуют, прежде чем делать что-либо еще. Я хотел бы перейти с ниже, пожалуйста, обратите внимание, я не запускал код .. Я надеюсь, что вы правильно поняли

///Loop through directory to standardize file names
            try
            {
                //Cleanup source folder 
                foreach (string fileShortName in files)
                {
                    if (File.Exists(fileDirectory_Source + fileShortName))
                    {
                        //Time to move the file, its old
                        errorText = errorText + "Old File: " + fileShortName + " moved into the Old File folder.\r\n";

                        File.Move(dirInfo_Source + fileShortName, dirInfo_Source + "Old Files\\" + Path.GetFileNameWithoutExtension(fileShortName) + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + Path.GetExtension(fileShortName));
                    }
                }

                foreach (FileInfo fi in dirInfo_Source.GetFiles())
7
задан Sydius 6 December 2008 в 20:13
поделиться

1 ответ

То, с чем Вы связались, является директивой использования. Объявление использования может использоваться прекрасное с шаблонными базовыми классами (не искали его в стандарте, но просто протестировали его с компилятором):

template<typename T> struct c1 { 
    void foo() { std::cout << "empty" << std::endl; } 
}; 

template<typename T> struct c2 : c1<T> { 
    using c1<T>::foo; 
    void foo(int) { std::cout << "int" << std::endl; } 
}; 

int main() { 
    c2<void> c;
    c.foo();
    c.foo(10); 
}

Компилятор правильно находит без параметров foo функция из-за нашего объявления использования, повторно объявляющего это в объем c2, и выводы ожидаемый результат.

Править: обновленный вопрос. вот обновленный ответ:

Статья права относительно этого, Нельзя использовать шаблонный идентификатор (шаблонное имя и аргументы). Но можно поставить шаблонное имя:

struct c1 { 
    template<int> void foo() { std::cout << "empty" << std::endl; } 
}; 

struct c2 : c1 { 
    using c1::foo; // using c1::foo<10> is not valid
    void foo(int) { std::cout << "int" << std::endl; } 
}; 

int main() { 
    c2 c;
    c.foo<10>();
    c.foo(10); 
}
5
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

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