Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 29
  1. #11
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Пример на С++, но это не С++, это - бородатый кодинг в стиле Си.
    PHP код:
    #include "stdafx.h"
    #include <iostream>

    using namespace std;

    void Print(int);
    void Print(double);
    void Print(bool);

    int main()
    {
        Print(
    1);
        Print(
    1.0);
        Print(
    true);
        
    system("pause");
        return 
    0;
    }
    // выводит на экран целочисленное значение
    void Print(int arg)
    {
        
    cout << "int: " << arg << endl;
    }

    // выводит вещественное значение
    void Print(double arg)
    {
        
    cout << "float " << arg << endl;
    }

    // выводит значение логического типа
    void Print(bool arg)
    {
        
    // у функции printf нет спецификатора "%b" для bool, поэтому придётся
        // реализовать вывод значений логического типа другим способом
        
    cout.setf(ios::boolalpha);
        
    cout << "bool: " << arg << endl;

    "Чем лучше вы знаете C, тем труднее вам будет избежать программирования на C++ в стиле C, теряя при этом потенциальные преимущества C++" (C) Bjarne Stroustrup's.
    Последний раз редактировалось $continue$; 19.08.2015 в 06:36.

  2. #12
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    PHP код:
    #include "stdafx.h"
    #include <iostream>

    using namespace std;

    void Print(int);
    void Print(double);
    void Print(bool);

    int main()
    {
        Print(
    1);
        Print(
    1.0);
        Print(
    true);
        
    system("pause");
        return 
    0;
    }
    // выводит на экран целочисленное значение
    void Print(int arg)
    {
        
    cout << "int: " << arg << endl;
    }

    // выводит вещественное значение
    void Print(double arg)
    {
        
    cout << "float " << arg << endl;
    }

    // выводит значение логического типа
    void Print(bool arg)
    {
        
    // у функции printf нет спецификатора "%b" для bool, поэтому придётся
        // реализовать вывод значений логического типа другим способом
        
    cout.setf(ios::boolalpha);
        
    cout << "bool: " << arg << endl;

    Цитата Сообщение от $continue$ Посмотреть сообщение
    Пример на С++, но это не С++, это - бородатый кодинг в стиле Си.
    Вы сделали пример из 1-го поста только ещё больше похожим на C++, использовав cout из iostream.
    Да и предварительное объявление функций в крестах тоже часто используется.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #13
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Пример на С++, но это не С++, это - бородатый кодинг в стиле Си.
    PHP код:
    #include "stdafx.h"
    #include <iostream>

    using namespace std;

    void Print(int);
    void Print(double);
    void Print(bool);

    int main()
    {
        Print(
    1);
        Print(
    1.0);
        Print(
    true);
        
    system("pause");
        return 
    0;
    }
    // выводит на экран целочисленное значение
    void Print(int arg)
    {
        
    cout << "int: " << arg << endl;
    }

    // выводит вещественное значение
    void Print(double arg)
    {
        
    cout << "float " << arg << endl;
    }

    // выводит значение логического типа
    void Print(bool arg)
    {
        
    // у функции printf нет спецификатора "%b" для bool, поэтому придётся
        // реализовать вывод значений логического типа другим способом
        
    cout.setf(ios::boolalpha);
        
    cout << "bool: " << arg << endl;

    "Чем лучше вы знаете C, тем труднее вам будет избежать программирования на C++ в стиле C, теряя при этом потенциальные преимущества C++" (C) Bjarne Stroustrup's.
    PHP код:
    template <typename T>
    void Print (const &t)
    {
        
    std::cout << typeid(t).name() << " " << << std::endl;
    }

    Print<
    int>(10);
    Print<
    bool>(true);
    Print<
    float>(10.011); 

  4. #14
    Аватар для Glant
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2014
    Сообщений
    54
    Репутация:
    3 ±
    Подскажите, что это такое ([MAX_PLAYER_NAME] рядом с заголовком функции)

    Код:
    GetPlayerNameAlt(playerid)[MAX_PLAYER_NAME]
    {
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        return name;
    }

  5. #15
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    o_0, а где ты такое увидел?

  6. #16
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Glant Посмотреть сообщение
    Подскажите, что это такое ([MAX_PLAYER_NAME] рядом с заголовком функции)

    Код:
    GetPlayerNameAlt(playerid)[MAX_PLAYER_NAME]
    {
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        return name;
    }
    Это не валидный синтаксис, и скорее всего будут ошибки при компиляции, поэтому стоит удалить данный код (хотя, возможно, что это макрос).

    P.S.: Оно работает?
    Последний раз редактировалось VVWVV; 25.07.2016 в 18:39.

  7. #17
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Glant Посмотреть сообщение
    Подскажите, что это такое ([MAX_PLAYER_NAME] рядом с заголовком функции)

    Код:
    GetPlayerNameAlt(playerid)[MAX_PLAYER_NAME]
    {
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        return name;
    }
    Скорее всего просто опечатка, возникшая в результате копипаста.

    По теме:
    Разве так нельзя? Без переменных.
    PHP код:
    stock Print({_Floatbool}:argarg_type=tagof(arg))
    {
        switch(
    arg_type)
        {
            case 
    tagof(Float:):
                
    PrintFloat(Float:arg);
            case 
    tagof(bool:):
                
    PrintBool(bool:arg);
            default:
                
    PrintInt(arg);
        }



    UPD.

    Проверил, так можно, только нужно поставить дополнительные скобки для tagof (иначе не скомпилируется):
    PHP код:
    stock Print({_Floatbool}:argarg_type=tagof(arg))
    {
        switch(
    arg_type)
        {
            case (
    tagof(Float:)):
                
    PrintFloat(Float:arg);
            case (
    tagof(bool:)):
                
    PrintBool(bool:arg);
            default:
                
    PrintInt(arg);
        }

    Последний раз редактировалось ziggi; 25.07.2016 в 19:08.

  8. Пользователь сказал cпасибо:
    Nash_Brigers (26.07.2016)
  9. #18
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Это не валидный синтаксис, и скорее всего будут ошибки при компиляции, поэтому стоит удалить данный код (хотя, возможно, что это макрос).
    Исправил.


    Цитата Сообщение от VVWVV Посмотреть сообщение
    P.S.: Оно работает?
    Ну... по крайней мере задумывалось так, чтобы работало. Исправил тот пост.
    Btw, вот где эта фича была замечена впервые: http://forum.sa-mp.com/showpost.php?...1&postcount=32


    Цитата Сообщение от ziggi Посмотреть сообщение
    Проверил, так можно, только нужно поставить дополнительные скобки для tagof (иначе не скомпилируется):
    PHP код:
    stock Print({_Floatbool}:argarg_type=tagof(arg))
    {
        switch(
    arg_type)
        {
            case (
    tagof(Float:)):
                
    PrintFloat(Float:arg);
            case (
    tagof(bool:)):
                
    PrintBool(bool:arg);
            default:
                
    PrintInt(arg);
        }

    Интересная находка... Не то, чтобы сильно полезная (в варианте с константами всё равно ничего лишнего в скомпилированный код не попадёт, пострадает только читаемость), но интересная.
    Изначально я думал, что это такая фича языка, что нельзя пользоваться результатом tagof в switch. Хотя сейчас, спустя год после написания сей статьи, я не понимаю, как вообще можно было сделать такой вывод, это же явно баг.
    Сейчас обновлю статью.


    UPD: Ок, обновил статью ещё раз.
    Только что проверил, в Pawn 4.0 этот баг остался.

    @ziggi, не против, если напишу багрепорт в репо на GitHub, или ты сам?
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #19
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    @ziggi, не против, если напишу багрепорт в репо на GitHub, или ты сам?
    Напиши конечно, я даже не подумал об этом

  11. #20
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Напиши конечно, я даже не подумал об этом
    Три бага по цене одного.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •