Last active
October 25, 2025 12:27
-
-
Save sunmeat/b3fab7810397d7b5b150a4b132e1c6b9 to your computer and use it in GitHub Desktop.
технічні відмінності
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 1. універсальні шаблони мови C# не забезпечують такої ж гнучкості, як шаблони мови C++. | |
| // наприклад, неможливо викликати арифметичні оператори в універсальному класі мови C#, | |
| // хоча можна викликати оператори, визначені користувачем. | |
| public class MyClass<T> | |
| { | |
| public T Add(T a, T b) | |
| { | |
| return (dynamic)a + (dynamic)b; // коли використовуються dynamic, компілятор відкладає перевірку типів до часу виконання. | |
| // це дозволяє використовувати оператор + для будь-яких типів, які підтримують цей оператор, але також вимагає, | |
| // щоб операнди справді підтримували оператор +, інакше станеться помилка часу виконання. | |
| } | |
| } | |
| ====================================================================================================================================== | |
| // 2. C# не дозволяє використовувати параметри шаблону, що не є типами: | |
| template<int N> | |
| void myFunction() { | |
| std::cout << "Value of N in function: " << N << std::endl; | |
| } | |
| ====================================================================================================================================== | |
| // 3. C# не підтримує явну спеціалізацію, тобто індивідуальну реалізацію шаблону для конкретного типу. | |
| // загальний шаблон класу | |
| template<typename T> | |
| class MyClass { | |
| public: | |
| void display() { | |
| std::cout << "Generic Template" << std::endl; | |
| } | |
| }; | |
| // явна спеціалізація для типу int | |
| template<> | |
| class MyClass<int> { | |
| public: | |
| void display() { | |
| std::cout << "Specialized Template for int" << std::endl; | |
| } | |
| }; | |
| ====================================================================================================================================== | |
| // 4. C# не підтримує часткову спеціалізацію: індивідуальну реалізацію для підмножини аргументів типу. | |
| // загальний шаблон класу | |
| template<typename T, typename U> | |
| class MyClass { | |
| ... | |
| // часткова спеціалізація, коли другий параметр є покажчиком | |
| template<typename T, typename U> | |
| class MyClass<T, U*> { | |
| ... | |
| // часткова спеціалізація, коли перший параметр є покажчиком | |
| template<typename T, typename U> | |
| class MyClass<T*, U> { | |
| ... | |
| ====================================================================================================================================== | |
| // 5. C# не дозволяє використовувати параметр типу як базовий клас для універсального типу: | |
| // базовий шаблонний клас | |
| template<typename Base> | |
| class Derived : public Base { | |
| public: | |
| ... | |
| ====================================================================================================================================== | |
| // 6. C# не дозволяє параметрам типів мати типи за замовчуванням: | |
| // шаблонний клас з типом за замовчуванням | |
| template<typename T = int> | |
| class MyClass { | |
| public: | |
| ... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment