<script> export default { globalData: { typeid: 1, userInfo: {} }, onLaunch: function() { console.log('App Launch') uni.login({ "provider": "weixin", "onlyAuthorize": true, // 微信登录仅请求授权认证 success: (event) => { const { code } = event //客户端成功获取授权临时票据(code),向业务服务器发起登录请求。 uni.request({ url: this.serverUrl + '/user/login', data: { code: code }, success: (res) => { //获得token完成登录 const { data :token } = res.data // base64解码token的payload const userStr = decodeURIComponent(escape(atob(token.split('.')[1]))) const userObj = JSON.parse(userStr) // 用户信息 this.globalData.userInfo = JSON.parse(userObj.payload) console.log(this.globalData.userInfo) // 存储token uni.setStorageSync('token', token) console.log('token') } }); } }) }, onShow: function() { console.log('App Show') }, onHide: function() { console.log('App Hide') } } </script> <style> </style>
时间: 2024-04-28 13:21:20 浏览: 12
这是一个小程序的 App 实例,使用了uni-app框架。在小程序启动时,会执行 onLaunch 函数。在该函数中,先进行微信登录,获取授权临时票据 code,并向业务服务器发起登录请求。登录成功后,将用户信息存储到全局变量 globalData 中,并将 token 存储到本地缓存中。在小程序显示和隐藏时,会分别执行 onShow 和 onHide 函数。
相关问题
C++std::any判断类型是否为std::list<int>
可以使用std::any_cast将std::any对象转换为目标类型,并使用std::type_info判断类型是否为std::list<int>。
例如:
```
#include <any>
#include <list>
#include <iostream>
int main() {
std::any a = std::list<int>{1, 2, 3};
if (a.type() == typeid(std::list<int>)) {
auto list = std::any_cast<std::list<int>>(a);
std::cout << "The list has " << list.size() << " elements." << std::endl;
} else {
std::cout << "The object is not a list of integers." << std::endl;
}
return 0;
}
```
在上面的代码中,我们首先将一个std::list<int>对象存储到std::any对象a中。然后,我们使用a.type()获取a中存储的对象类型的std::type_info对象,并与typeid(std::list<int>)比较,判断是否为std::list<int>类型。如果是,我们使用std::any_cast将a转换为std::list<int>对象,并输出其大小。如果不是,我们输出一条错误消息。
代码头文件如下#pragma once #include<iostream> #include<typeinfo> class IBHEng { private: /* data */ public: IBHEng(/* args */); template<typename T> void print_type(){ T varT; std::cout<<"type name:"<<typeid(varT).name()<<'\n'; } };如何在源文件中给出模板函数的具体定义
在源文件中,你可以这样给出模板函数的具体定义:
```
#include "IBHEng.h" // 假设头文件名为 IBHEng.h
// 模板函数的具体定义应该放在同一个命名空间下
namespace IBHEng {
// 模板函数的具体定义
template<typename T>
void IBHEng::print_type() {
T varT;
std::cout << "type name:" << typeid(varT).name() << '\n';
}
} // namespace IBHEng
```
需要注意的是,模板函数的具体定义也要写在命名空间 `IBHEng` 下。此外,由于模板函数的定义需要包含在头文件中,因此在源文件中包含头文件 `IBHEng.h`,以便使用模板函数。