C ++ 11, предоставляющий пустую не-членную функцию, когда она отсутствует

Заставка - это немного непригодный для использования объект в Android: он не может быть загружен как можно скорее для скрытия задержки запуска основной активности. Для этого есть две причины: реклама и сетевые операции.

Выполнение в качестве диалога делает переход без зазора от экрана всплеска до основного пользовательского интерфейса активности.

public class SplashDialog extends Dialog {
    ImageView splashscreen;
    SplashLoader loader;
    int splashTime = 4000;

    public SplashDialog(Context context, int theme) {
        super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        setCancelable(false);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                cancel();
            }
        }, splashTime);

    }
}

Макет:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">

    <ImageView
        android:id="@+id/splashscreen"
        android:layout_width="190dp"
        android:layout_height="190dp"
        android:background="@drawable/whistle"
        android:layout_centerInParent="true" />

</RelativeLayout>

И запуск:

public class MyActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getCategories() != null &&  getIntent().getCategories().contains("android.intent.category.LAUNCHER")) {
            showSplashScreen();
        }
    }

    protected Dialog splashDialog;
    protected void showSplashScreen() {
        splashDialog = new SplashDialog(this, R.style.SplashScreen);
        splashDialog.show();
    }

    ...
}
0
задан 1201ProgramAlarm 13 July 2018 в 18:15
поделиться

1 ответ

Добавьте шаблон функции, не являющийся членом.

template <typename stream, typename T> void serialize(stream& s, T& t) {}

Вот демонстративная программа:

#include <iostream>

template <typename stream, typename type> void serialize(stream&, type&)
{
   std::cout << "Came to 1\n";
}

struct stream
{
   void serialize(int ) {}
};

// struct foo
struct foo {
    int bar;
};

// serialize foo
template <class stream> void serialize(stream& s, foo& f) {
   std::cout << "Came to 2\n";
   s.serialize(f.bar);
}

struct bar {
};

int main()
{
   // ...later in source file:
   foo f;
   stream s;
   serialize(s, f);
   bar b;
   serialize(s, b);
}

и ее вывод в cygwin / g ++ 6.4.0:

Came to 2
Came to 1

Он также работает на ideone.com .

1
ответ дан R Sahu 17 August 2018 в 12:31
поделиться
  • 1
    Когда я это делаю, он просто всегда вызывает эту пустую функцию, даже думал, что я предлагаю реализацию для некоторых типов. Может ли заказ на объявление быть проблемой? – Deathicon 13 July 2018 в 15:32
  • 2
    @Deathicon, пожалуйста, напишите, что вы пробовали. – R Sahu 13 July 2018 в 15:34
  • 3
    @Deathicon, я добавил немного больше контента для ответа. – R Sahu 13 July 2018 в 16:14
  • 4
    Хорошо, я не знаю, что происходит на моей стороне, это не работает по какой-то причине ... Мне придется его выкопать. Спасибо за Ваш ответ. – Deathicon 13 July 2018 в 16:18
  • 5
    Моя проблема была вызвана пространствами имен. Извините за шум. – Deathicon 13 July 2018 в 19:28
Другие вопросы по тегам:

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